Я некоторое время экспериментировал с Python 2.X и юникодом. Но я достиг точки, когда это не имеет смысла.
Первая проблема:
Некоторый код ясно объяснит, что я имею в виду. Переменная txt предназначена для имитации функции перевода pyqt4. Который возвращает QString.
# -*- coding: utf-8 -*-
from PyQt4 import QtCore
txt = QtCore.QString(u'può essere / sarà / 日本語')
txtUnicode1 = unicode(txt, errors='replace')
txtUnicode2 = unicode(txt)
При печати() двух строк юникода я получаю:
пу� эссере / сар� / ???
può essere / sarà / 日本語
Конечно, я мог бы получить то же самое, используя QString.__str__(), но я хочу понять, поэтому ради аргумента я хотел бы знать:
- Почему error='replace' заменяет все закодированные символы, когда это должно делаться только в случае ошибок?
- Есть ли проблема с использованием unicode(QString) для превращения QString в строку unicode, пригодную для отображения?
Вторая проблема:
Я пытаюсь понять кодирование/декодирование.
>>> a = u'può essere / sarà / 日本'
>>> b = a.encode('utf-8')
>>> a
u'pu\xf2 essere / sar\xe0 / \u65e5\u672c'
>>> b
'pu\xc3\xb2 essere / sar\xc3\xa0 / \xe6\x97\xa5\xe6\x9c\xac'
>>> print a
può essere / sarà / 日本
>>> print b
può essere / sarà / 日本
- Расшифровывает ли print a и b?
- Кодированный-кодированный UTF-8 должен быть полностью декодирован? Разве я не должен напечатать закодированную строку?
- В чем разница между закодированной и декодированной строкой Unicode?
print
Unicode-строку. Это не специфичная для Python проблема, но она затрудняет экспериментирование с пониманием Unicode. Вы можете попрактиковаться в терминале Linux или веб-интерфейсе, который может надежно работать с Unicode. - person bobince   schedule 10.03.2012