python - chr() 和 bytes.decode 之间的区别

标签 python python-3.x

谁能解释一下为什么我可以通过

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/

相关文章:

python - 计算 Python 字典中的冲突

python - 创建许多相关对象,如 INSERT ... SQL 中的 SELECT

python - 为什么快速调用 Python 类的 id 不是唯一的?

python - 查看到到网的抓取表单

gtk - 适用于 Python 3 的小部件工具包

python sqlite 字符串插入

python - 在 pandas 数据框中查找具有相同值的行之前的行

python - 如何查看 html 选择器中的隐藏内容?

python - Pandas cut 函数提供的类别少于预期

python - 使用sklearn线性回归,如何限制计算的回归系数大于0?