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(字节符号)和'(引号).
为什么这样做,而不只是在引号之间打印消息?
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)