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

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

最佳答案

...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/

相关文章:

python - Django 表单在控制台中验证,但为什么不在浏览器中验证?

python - 关于python中字符串格式化的几个问题。结盟

java - 最小化该算法的时间复杂度(选择提要中的公共(public)子字符串)

python - 如何在 Anaconda Env 中启动 Visual Studio Code

python-3.x - matplotlib 中的子类轴

Python:比较 C4D 中的层次结构

python - Django ORM : Equivalent of SQL `NOT IN` ? `exclude`和 `Q`对象不起作用

python - python 中的极圈动画

python - 我想在 python 代码中添加 ssl 证书,但我不知道如何在代码中添加它

java - 检查字符串是否包含 Velocity 中的特定子字符串