如何将Unicode原始字面量解码为可读字符串?

26
如果我将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个回答

34

3
原因是'\uXXXX'在非Unicode字符串字面量中是逐字不变的。 - user166390
找到了最好的解决方案,专门针对俄语字符。 - Mayur Koshti

0

如果您在解码时得到了奇怪的结果,请尝试以下操作

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

可能是因为Python终端使用默认的ASCII编码,而某些符号超出了范围。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接