有人可以解释为什么我可以通过以下方式将bytes对象转换为str

>>> bytes_ = b';\xf7\xb8W\xef\x0f\xf4V'
>>> list(bytes_)
[59, 247, 184, 87, 239, 15, 244, 86]
>>> "".join([chr(x) for x in bytes_])
';÷¸Wï\x0fôV'


但是如果我打电话

>>> bytes_.decode()
Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    bytes_.decode()
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf7 in position 1: invalid start byte


我得到一个错误。

最佳答案

.decode()使用的默认编码为UTF-8。但是,至少bytes_中的某些字节不能正确编码UTF-8字符。另一方面,chr(n)按其序号而不是编码返回第n个Unicode字符。如果要使.decode()工作,则必须告诉它使用哪种编码。例如,utf-16似乎可以工作:

bytes_.decode('utf-16')
#'\uf73b垸\u0fef围'


CP1252也可以,但是(预期)给出不同的结果:

bytes_.decode('cp1252')
#';÷¸Wï\x0fôV'

关于python - chr()和bytes.decode之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43564800/

10-11 16:02