在Python3中评估字符串中的UTF-8文字转义序列

时间:2014-10-11 05:04:13

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

我有一个表格的字符串:

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编码文件。

1 个答案:

答案 0 :(得分:7)

...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')
'♬'