我有一个字符串x
,如下所示
x = "\xe9\x94\x99\xe8\xaf\xaf"
此字符串应为Unicode字符串,但无法正确显示(打印)。
字符串y
是以b
开头的Unicode字符串/字节,而y
可以正确显示y.decode('utf-8')
y = b"\xe9\x94\x99\xe8\xaf\xaf"
我的问题是如何将x转换为y?
答案 0 :(得分:3)
假设我们正在谈论Python3,那么Unicode字符串x
长度为6个代码点。恰好是每个代码点都在0x00
到0xff
范围内(ASCII子集)。我们可以使用raw_unicode_escape
编解码器获取确切的字节字符串,如下所示:
>>> x = "\xe9\x94\x99\xe8\xaf\xaf"
>>> y = x.encode('raw_unicode_escape')
>>> y
b'\xe9\x94\x99\xe8\xaf\xaf'
>>> y.decode('utf8')
'错误'
请注意,这仅在字符串x
仅包含Unicode的ASCII子范围时才有效;否则你只会获得转义的Unicode代码点(正如编解码器的名称所示):
>>> "šž".encode('raw_unicode_escape')
b'\\u0161\\u017e'