如何解码Unicode原始字面量为可读字符串?
如果我把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
Сообщение отправлено
但是当我已经把值赋给一个普通的、不是unicode的字符串时,我就不能读取它了:
>>> 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 个回答
0
如果你在解码的时候得到了一些奇怪的结果,可以试试下面的方法:
print repr(s).decode('unicode-escape').encode('latin-1') // or encode using some other encoding
这可能是因为你的Python终端使用的是默认的ASCII编码,而你要解码的内容中有一些符号超出了这个范围。
34
s.decode('unicode_escape')