Image

Imageblaze_cs wrote in Imageru_python

Проблема с конвертацией строк в unicode

Добрый день. Опыта писания на Python у меня не очень много, но вот встретился вопрос с которым я разобраться сам не смог:

Мне необходимо распарсить входной файл и сгенерировать из него XML. Соответственно каждую прочитанную из файла строку я декодирую в unicode:

wmlFile = open(path)
for line in wmlFile:
line = line.decode(locale.getpreferredencoding())

А при записи соответственно обратно:
description = doc.createTextNode (descr.encode("utf8"))

И все вроде работало хорошо... на домашней машине с локалью koi8-r. Отладил и перенес все на ноут. На ноуте локаль UTF-8. Запускаю скрипт и получаю UnicodeDecodeError:


File "./workspace/PyOG/parse-dsa-oval.py", line 105, in ?
parsedirs (opts['-d'], '.data', 2)
File "./workspace/PyOG/parse-dsa-oval.py ", line 56, in parsedirs
parsedirs (path, postfix, depth-1)
File "./workspace/PyOG/parse-dsa-oval.py", line 68, in parsedirs
result = wml.parseFile(path)
File "/home/blaze/workspace/PyOG/oval/parser/wml.py", line 35, in parseFile
line = line.decode(locale.getpreferredencoding())
File "encodings/utf_8.py", line 16, in decode
UnicodeDecodeError: 'utf8' codec can't decode byte 0xbb in position 23: unexpected code byte


В строке в это время находятся данные:

Javier Fernández-Sanguino Peña discovered insecure temporary file use

В качестве workaround я придумал такой костыль:
try:
line = line.decode(locale.getpreferredencoding())
except:
line = line.decode("koi8-r")
Но костыль это не решение. Поэтому подскажите пожалуйста в чем я не прав?