我有一个字符串 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?
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'
"é[x][x]è"
代表x
,以及"[x][x]"
代表y
。 - Right leg