Python bytes类型

bytes是Python 3.x新增的类型.

bytes和字符串(string)的对比:

  • 字符串由若干个字符组成, 以字符为单位进行操作; bytes由若干个字节组成, 以字节为单位进行操作;
  • bytes和字符串除了操作的数据单元不同之外, 它们支持的所有方法基本相同;
  • bytes和字符串都是不可变序列, 不能随意增加和删除数据.

bytes只负责以字节序列的形式(二进制形式)来存储数据, 至于这些数据到底表示什么内容(字符串, 数字, 图片, 音频等), 完全由程序的解析方式决定. 如果采用合适的字符编码方式(字符集), bytes可以恢复成字符串; 反之亦然, 字符串也可以转换成bytes.

说白了, bytes只是简单地记录内存中的原始数据, 至于如何使用这些数据, bytes并不关心.

bytes类型的数据非常适合在网络上传输, 可以用于网络编程; bytes也可以用来存储图片, 音频, 视频等二进制格式的文件.

字符串和bytes存在着千丝万缕的联系, 可以通过字符串来创建bytes对象, 或者说将字符串转换成bytes对象. 有以下三个方法可以达到这个目的:

  • 如果字符串的内容都是ASCII字符, 那么直接在字符串前面添加b前缀就可以转换成bytes;
  • bytes是一个类, 调用它的构造方法, 也就是bytes(), 可以将字符串按照指定的字符集转换成bytes; 如果不指定字符集, 那么默认采用UTF-8;
  • 字符串本身有一个encode()方法, 该方法专门用来将字符串按照指定的字符集转换成对应的bytes; 如果不指定字符集, 那么默认采用UTF-8.

Example:

# 通过构造函数创建空bytes
b1 = bytes()

# 通过空字符串创建空bytes
b2 = b''

# 通过b前缀将字符串转换成bytes
b3 = b'hello, world'

# 为bytes方法指定字符集
b4 = bytes('hello, world', encoding='UTF-8')

# 通过encode()方法将字符串转换成bytes
b5 = 'hello, world'.encode('UTF-8')

bytes类也有一个decode()方法, 通过该方法可以将bytes对象转换为字符串.

Example:

b = 'hello, world'.encode('UTF-8')
str = b.decode('UTF-8')
print(str)