假设我有一个包含字节的变量:
>>> a = b'Hello World'
可以通过以下方式验证:
>>> type(a)
<class 'bytes'>
现在我尝试使用 str() 将 a 转换为字符串:
>>> b = str(a)
果然是一个字符串:
>>> type(b)
<class 'str'>
现在我尝试打印 b 但我得到了一个完全出乎意料的结果:
>>> print(b)
b'Hello World'
它返回一个字符串,如我所料,但它还保留了 b(字节符号)和 '(引号)。
为什么要这样做,而不只是打印引号之间的消息?
请您参考如下方法:
不要将 bytes 值视为某些默认 8 位编码中的字符串。它只是二进制数据。因此,str(a) 返回一个与编码无关的字符串来表示字节字符串的值。如果您想要 'Hello World',请具体化并解码该值。
>>> b = a.decode()
>>> type(b)
>>> str
>>> print(b)
Hello World
在 Python 2 中,字节和文本之间的区别变得模糊。 Python 3 竭尽全力将两者分开:bytes 用于二进制数据,str 用于可读文本。
换个角度比较
>>> list("Hello")
['H', 'e', 'l', 'l', 'o']
与
>>> list(b"Hello")
[72, 101, 108, 108, 111]
