使用str()将字节转换为字符串将返回带有语音标记的字符串

Sim*_*mon 1 python string byte interpreter

假设我有一个包含字节的变量:

>>> a = b'Hello World'
Run Code Online (Sandbox Code Playgroud)

它可以通过以下方式验证:

>>> type(a)
<class 'bytes'>
Run Code Online (Sandbox Code Playgroud)

现在我尝试将a转换为字符串str():

>>> b = str(a)
Run Code Online (Sandbox Code Playgroud)

果然它是一个字符串:

>>> type(b)
<class 'str'>
Run Code Online (Sandbox Code Playgroud)

现在我尝试打印b但是我得到了一个完全出乎意料的结果:

>>> print(b)
b'Hello World'
Run Code Online (Sandbox Code Playgroud)

它返回一个字符串,正如我所料,但它也保留b(字节符号)和'(引号).

为什么这样做,而不只是在引号之间打印消息?

che*_*ner 5

bytes在某些默认的8位编码中,不要将值视为字符串.它只是二进制数据.因此,str(a)返回与编码无关的字符串以表示字节字符串的值.如果需要'Hello World',请具体并解码该值.

>>> b = a.decode()
>>> type(b)
>>> str
>>> print(b)
Hello World
Run Code Online (Sandbox Code Playgroud)

在Python 2中,字节和文本之间的区别是模糊的.Python 3竭尽全力将二者分开:bytes用于二进制数据和str可读文本.

从另一个角度来看,比较

>>> list("Hello")
['H', 'e', 'l', 'l', 'o']
Run Code Online (Sandbox Code Playgroud)

>>> list(b"Hello")
[72, 101, 108, 108, 111]
Run Code Online (Sandbox Code Playgroud)