我不知道为什么解码会失败,如果字节字符串以a,b,c,d,e或f(而不是数字)开头,则总是有两个反斜杠而不是一个。
>>> bstr = b'\xfb'
>>> bstr.decode('utf8', 'backslashreplace')
'\\xfb'
我想要的是'\ xfb'。
但是
>>> bstr = b'\x1f'
>>> bstr.decode('utf8', 'backslashreplace')
'\x1f'
按预期工作。你知道怎么了吗?
答案 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'
的转换。由于缺少太多上下文,我们无法告诉您您需要做什么。