在Python3中,官方对字符串和二进制数据流做了明确的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。str类型与bytes类型由此彻底区分开来,Python 3不会以任意隐式的方式混用str和bytes,不能拼接字符串和字节流,也无法在字节流里搜索字符串(反之亦然),也不能将字符串传入参数为字节流的函数(反之亦然)。

bytes与str的区别是什么?

简单来说,区别就是:str以字符为单位进行处理,而bytes以字节为单位进行处理!

bytes对象只负责以二进制字节序列的形式记录所需记录的对象,至于该对象到底表示什么(比如到底是什么字符)则由相应的编码格式解码所决定。

bytes对象打印出来后其值形式为 b’xxxxx’,其中 ‘xxxxx’ 为一至多个转义的十六进制字符串(单个 x 的形式为:\x12,其中\x为小写的十六进制转义字符,12为二位十六进制数)组成的序列,每个十六进制数代表一个字节(八位二进制数,取值范围0-255),对于同一个字符串如果采用不同的编码方式生成bytes对象,就会形成不同的值.

bytes与str的相互转换

1
2
3
4
5
6
b = b"example"    # bytes object  
s = "example" # str object
sb = bytes(s, encoding = "utf8") # str to bytes
或者:sb = str.encode(s) # str to bytes
bs = str(b, encoding = "utf8") # bytes to str
或者:bs = bytes.decode(b) # bytes to str

bytes类型的作用

Python3中,bytes通常用于网络数据传输、二进制图片和文件的保存等等。

计算机只认识二进制, 所以要存储东西到硬盘当中, 那就必须将这些东西编码成二进制后再存。
1、对于文字:可以以gbk、utf-8、ASCII编码
2、对于图片:必须编码成PNG、JPEG等格式
3、对于音乐:必须编码成MP3,WAV等