26

If I assign unicode raw literals to a variable, I can read its value:

>>> 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
Сообщение отправлено

But when I have already assigned value to a plain, not unicode string, I can not:

>>> 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

How can I decode and read it?

hippietrail
  • 15,848
  • 18
  • 99
  • 158
gennad
  • 5,335
  • 12
  • 44
  • 47

2 Answers2

34

Use the unicode_escape codec:

s.decode('unicode_escape')
Uyghur Lives Matter
  • 18,820
  • 42
  • 108
  • 144
Udi
  • 29,222
  • 9
  • 96
  • 129
0

If you are getting weird results when decoding try following

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

It could be that python terminal is using default ASCII and there is symbol that goes out of range.

Matas Vaitkevicius
  • 58,075
  • 31
  • 238
  • 265