我不知道为什么解码失败,如果字节字符串以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/