Правильно ли использовать юникод в Python 2.7, Ubuntu 13.4?

В последней версии 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')), но, похоже, это не помогло. Насколько я могу судить, все остальное работает нормально с юникодом (это современная версия популярного дистрибутива и все такое).

2
задан 6 August 2013 в 19:27

1 ответ

Я должен отметить, что вы играете с самоанализом там. 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 обладает некоторыми специфическими несовместимостями с обратным типом, поэтому, если вам нужны определенные библиотеки (или у вас есть тонны собственного несовместимого кода), это на самом деле не вариант.

0
ответ дан 6 August 2013 в 19:27

Другие вопросы по тегам:

Похожие вопросы: