我有一个形式的字符串:
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¬',打印随后无法处理该字符串。
如果有任何不同,字符串将从 UTF-8 编码文件中读取,并在处理后最终输出到不同的 UTF-8 编码文件。
最佳答案
...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')
'♬'
关于python - 在 Python3 中评估字符串中的 UTF-8 文字转义序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26311277/