如何用正确的转义将字节字符串转换成字符?

2024-09-29 21:47:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我不明白,为什么解码失败,如果字节字符串以十六进制a、b、c、d、e或f开头,而不是一个数字,那么总是有两个反斜杠而不是一个。你知道吗

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

我想要的是“\xfb”。你知道吗

但是

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

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


Tags: 字符串字节数字utf8解码decodexfb斜杠
1条回答
网友
1楼 · 发布于 2024-09-29 21:47:19

b'\xfb'是包含单个字节的bytestring。该字节具有十六进制值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字节替换为字符序列反斜杠-x-f-b

虽然可以将b'\xfb'转换成'\xfb',但这种转换与UTF-8没有任何关系,在没有明确需求的情况下应用这种转换只会导致更多的问题。你需要弄清楚你的程序实际上需要做什么。最有可能的是,正确的前进道路不涉及任何b'\xfb''\xfb'的转换。我们不知道你需要做什么,因为我们错过了太多的背景。你知道吗

相关问题 更多 >

    热门问题