有人可以解释为什么我可以通过
将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
我收到错误。
答案 0 :(得分:4)
.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'