【问题标题】:Evaluate UTF-8 literal escape sequences in a string in Python3在 Python3 中评估字符串中的 UTF-8 文字转义序列
【发布时间】:2014-12-06 07:45:21
【问题描述】:

我有一个形式的字符串:

s = '\\xe2\\x99\\xac'

我想通过评估转义序列将其转换为字符 ♬。但是,我尝试过的所有操作都会导致错误或打印出垃圾。如何强制 Python 将转义序列转换为文字 unicode 字符?

我在其他地方读到的内容表明以下代码行应该做我想要的,但它会导致 UnicodeEncodeError。

print(bytes(s, 'utf-8').decode('unicode-escape'))

我也尝试了以下方法,结果相同:

import codecs
print(codecs.getdecoder('unicode_escape')(s)[0])

这两种方法都会产生字符串 'â\x99¬',而 print 随后无法处理。

如果有任何不同,则从 UTF-8 编码文件中读取字符串,并在处理后最终输出到不同的 UTF-8 编码文件。

【问题讨论】:

    标签: python string python-3.x unicode utf-8


    【解决方案1】:

    ...decode('unicode-escape') 会给你字符串'\xe2\x99\xac'

    >>> s = '\\xe2\\x99\\xac'
    >>> s.encode().decode('unicode-escape')
    'â\x99¬'
    >>> _ == '\xe2\x99\xac'
    True
    

    您需要对其进行解码。但要对其进行解码,请先使用latin1(或iso-8859-1)对其进行编码以保留字节。

    >>> s = '\\xe2\\x99\\xac'
    >>> s.encode().decode('unicode-escape').encode('latin1').decode('utf-8')
    '♬'
    

    【讨论】:

    • 嘿,这在控制台中对我来说很好,但我无法让它在我的程序中工作(我从文件中读取文本)。
    • @fallaciousreasoning,你能用可重现的示例代码发布一个问题吗?
    • @fallaciousreasoning,我在那里回答。看看吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2019-01-24
    • 2019-07-20
    • 2015-11-06
    • 2012-09-22
    • 1970-01-01
    相关资源
    最近更新 更多