将“\x”转义字符串转换为 python 中的可读字符串

Convert "\x" escaped string into readable string in python

有没有办法将像 "\xe8\xaa\x9e\xe8\xa8\x80" 这样的 \x 转义字符串转换为可读形式:"語言"?

>>> a = "\xe8\xaa\x9e\xe8\xa8\x80"
>>> print(a)
\xe8\xaa\x9e\xe8\xa8\x80

我知道有一个类似的问题here,但解决方案似乎只适用于拉丁字符。如何将这种形式的字符串转换成可读的中日韩字符?

先使用'unicode-escape'解码,然后'utf8':

a = "\xe8\xaa\x9e\xe8\xa8\x80"
    
decoded = a.encode('latin1').decode('unicode_escape').encode('latin1').decode('utf8')
print(decoded)

# 語言

请注意,由于我们只能解码字节对象,因此我们需要在其间使用 'latin1'.

对其进行透明编码

从似乎遵循 python 的十六进制转义规则的字符串 a 开始,您可以将其解码为字节对象加上已解码字符串的长度。

>>> a = "\xe8\xaa\x9e\xe8\xa8\x80"
>>> import codecs
>>> codecs.escape_decode(a)
(b'\xe8\xaa\x9e\xe8\xa8\x80', 24)

此处不需要长度,所以只需获取第 0 项即可。现在是猜测的时候了。假设这个字符串实际上表示一个 utf-8 编码,你现在有一个可以解码的字节数组

>>> codecs.escape_decode(a)[0].decode('utf-8')
'語言'

如果基础编码不同(例如 Windows CJK 代码页),您必须使用其解码器进行解码。