В последней версии Ubuntu с Python по умолчанию (2.7.4) я не могу заставить работать юникод. Вот что происходит:
>>> print('tři')
tři
>>> d = {3:'tři'}
>>> d[3]
't\xc5\x99i'
>>> d = {3:u'tři'}
>>> d[3]
u't\u0159i'
Очевидно, я бы хотел, чтобы третья и / или пятая строка показывали то же, что и первая строка.
Я попытался поиграться с sys (импортировать, перезагрузить, затем установить defaultencoding ('utf-8')), но, похоже, это не помогло. Насколько я могу судить, все остальное работает нормально с юникодом (это современная версия популярного дистрибутива и все такое).
Я должен отметить, что вы играете с самоанализом там. Python 2 хранит Unicode только так, как знает, но не портит данные, и интерактивная консоль показывает вам это. Он показывает вам необработанную строку.
Если вы хотите увидеть вывод правильно, используйте print
:
>>> d = {3:'tři'}
>>> print d[3]
tři
Python 2.x по-прежнему рассматривает Unicode как нечто магическое и страшное. Python 3 обрабатывает все строки как Unicode. Если возможно, я бы рекомендовал использовать Python 3.
$ python3
Python 3.3.1 (default, Jul 5 2013, 09:19:20)
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('tři')
tři
>>> d = {3:'tři'}
>>> d
{3: 'tři'}
>>> d[3]
'tři'
Это не всегда так просто. Python 3 обладает некоторыми специфическими несовместимостями с обратным типом, поэтому, если вам нужны определенные библиотеки (или у вас есть тонны собственного несовместимого кода), это на самом деле не вариант.