【问题标题】:How to decode unicode raw literals to readable string?如何将 unicode 原始文字解码为可读字符串?
【发布时间】:2011-09-24 03:43:48
【问题描述】:

如果我将 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

如何解码和阅读?

【问题讨论】:

    标签: python string unicode encoding unicode-literals


    【解决方案1】:

    使用unicode_escape codec

    s.decode('unicode_escape')
    

    【讨论】:

    • (原因是'\uXXXX'在非Unicode字符串文字中是逐字。)
    • 找到了专门针对俄语字符的最佳解决方案
    【解决方案2】:

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

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

    可能是 python 终端使用默认 ASCII 并且有符号超出范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-23
      • 2021-10-16
      • 2021-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多