在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 | b = b"example" # bytes object |
bytes类型的作用
Python3中,bytes通常用于网络数据传输、二进制图片和文件的保存等等。
计算机只认识二进制, 所以要存储东西到硬盘当中, 那就必须将这些东西编码成二进制后再存。
1、对于文字:可以以gbk、utf-8、ASCII编码
2、对于图片:必须编码成PNG、JPEG等格式
3、对于音乐:必须编码成MP3,WAV等