2009-09-17 5 views
0

Моя программа хранит индекс файла в файле, упакованном cPickle. Существуют не-английские имена файлов. Когда я просто делаю этоПроблемы с кодированием в PyQt

print f [0] 

где F [0] "\ xc2 \ X Е8 \ xF1 \ Xee \ XEA \ Xee \ xF1 \ неподвижную \ XFB \ xE9 \ XE3 \ Xee \ xe4" ("Високосный год "в нормальном представлении), он печатает строку надлежащим образом - на русском языке.

Когда программа вручную добавляет строку u'Високосный год 'в QTreeView, все в порядке.

Но когда программа помещает эту строку ("\ XE3 \ Xee \ xe4" и т.д.) прямо из unpickled файла в QTreeView, становится так:

alt text http://img170.imageshack.us/img170/9226/encoding.png

Есть ли способ решить что?

+0

Я добавил комментарий к своему ответу. –

ответ

2

Вы запустили decode на незакрашенной строке, используя правильную кодировку («cp1251» по внешнему виду)? Если нет, вам нужно сделать это, чтобы убедиться, что вы передаете строку Юникода в графический интерфейс.

+0

Когда я пытаюсь декодировать строку с cp1251, ascii или любой другой кодировкой, я получаю ошибку «UnicodeEncodeError: кодек ascii не может кодировать символы в позиции 0-9: порядковый номер не в диапазоне (128)» –

+0

Не используйте ASCII, так как ваша строка явно содержит символы, отличные от ASCII. Используйте, например, «\ xe3 \ xee \ xe4» .decode («cp1251»), который должен привести к отображению «год». Вы не можете использовать случайные кодировки - он должен быть правильным, который преобразует байты «\ xe3 \ xee \ xe4» в Unicode «год». –

Смежные вопросы