Проблемы с кодировкой в ​​PyQt

Моя программа хранит индекс файла в файле, упакованном cPickle. Есть не английские имена файлов. Когда я просто делаю это

print f [0]

где f [0] равно "\xc2\xe8\xf1\xee\xea\xee\xf1\xed\xfb\xe9 \xe3\xee\xe4" ("Високосный год" в обычном представлении), он печатает строку в правильном путь — по-русски.

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

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

замещающий текст http://img170.imageshack.us/img170/9226/encoding.png< /а>

Есть ли способ решить эту проблему?


person Kirill Titov    schedule 17.09.2009    source источник
comment
Я добавил комментарий к своему ответу.   -  person Vinay Sajip    schedule 17.09.2009


Ответы (1)


Запускали ли вы decode для незащищенной строки, используя правильную кодировку (судя по всему, "cp1251")? Если нет, вам нужно сделать это, чтобы убедиться, что вы передаете строку Unicode в графический интерфейс.

person Vinay Sajip    schedule 17.09.2009
comment
когда я пытаюсь декодировать строку с помощью cp1251, ascii или любой другой кодировки, я получаю сообщение об ошибке UnicodeEncodeError: кодек ascii не может кодировать символы в позиции 0-9: порядковый номер не в диапазоне (128) - person Kirill Titov; 17.09.2009
comment
Не используйте ASCII, так как ваша строка явно содержит символы, отличные от ASCII. Используйте, например, \xe3\xee\xe4.decode(cp1251), что должно привести к отображению года. Вы не можете использовать случайные кодировки - это должна быть правильная, которая преобразует байты \xe3\xee\xe4 в год Unicode. - person Vinay Sajip; 17.09.2009