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

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


我想要的是“ \ xfb”。

但,

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


可以正常工作。你知道出什么事了吗

最佳答案

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'的转换。我们无法告诉您您需要做什么,因为我们缺少太多背景信息。

关于python - 如何将字节字符串转换为具有正确转义的字符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54775529/

10-12 21:50