如何将字节字符串转换为具有正确转义的字符?

时间:2019-02-19 21:53:38

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

我不知道为什么解码会失败,如果字节字符串以a,b,c,d,e或f(而不是数字)开头,则总是有两个反斜杠而不是一个。

>>> bstr = b'\xfb'
>>> bstr.decode('utf8', 'backslashreplace')
'\\xfb'

我想要的是'\ xfb'。

但是

>>> bstr = b'\x1f'
>>> bstr.decode('utf8', 'backslashreplace')
'\x1f'

按预期工作。你知道怎么了吗?

1 个答案:

答案 0 :(得分:2)

b'\xfb'是一个包含单个字节的字节串。该字节的十六进制值为FB,或十进制的251。

'\xfb'是一个包含单个Unicode代码点的字符串。该代码点是U + 00FB带斜线的拉丁文小写字母U或û

b'\xfb'不是'\xfb'的UTF-8编码。 '\xfb'的UTF-8编码为b'\xc3\xbb'

>>> '\xfb'.encode('utf-8')
b'\xc3\xbb'

实际上,b'\xfb'根本不是任何东西的UTF-8编码,并且尝试将其解码为UTF-8是错误的。 'backslashreplace'指定了一种处理该错误的方法,其中FB字节由字符序列backslash-x-f-b代替。

虽然有可能做将b'\xfb'转换为'\xfb'的事情,但该转换与UTF-8无关,而在未明确要求的情况下应用该转换只会导致更多问题。您需要弄清楚您的程序实际上需要做什么。正确的前进极有可能不涉及任何b'\xfb''\xfb'的转换。由于缺少太多上下文,我们无法告诉您您需要做什么。