Как декодировать необработанные литералы Unicode в читаемую строку? - PullRequest
24 голосов
/ 28 июня 2011

Если я присваиваю переменные в формате Unicode переменной, я могу прочитать ее значение:

>>> s =  u'\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e'
>>> s
u'\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e'
>>> print s
Сообщение отправлено

Но когда я уже присвоил значение простой строке, а не строке в Юникоде, я не могу:

>>> s =  '\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e'
>>> s
'\\u0421\\u043e\\u043e\\u0431\\u0449\\u0435\\u043d\\u0438\\u0435 \\u043e\\u0442\\u043f\\u0440\\u0430\\u0432\\u043b\\u0435\\u043d\\u043e'
>>> print s
\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e

Как мне расшифровать и прочитать?

Ответы [ 2 ]

32 голосов
/ 28 июня 2011

Используйте кодек unicode_escape :

s.decode('unicode_escape')
0 голосов
/ 19 мая 2016

Если вы получаете странные результаты при декодировании, попробуйте выполнить следующее:

print repr(s).decode('unicode-escape').encode('latin-1') // or encode using some other encoding

Возможно, терминал Python использует ASCII по умолчанию и существует символ, выходящий за пределы диапазона.

...