Python3的一个新特性算是把文本和二进制数据清晰地区分开来了。我们看到的文本其实就是一连串的Unicode字符组成的str(下文文无特殊说明均指Unicode字符),最后计算机以二进制数据的形式存储起来。Python内置了两种二进制数据类型,分别是bytes和bytearray。
每一个字符都有一个对应的标识,即码位,是0-1 114 111的数字(十进制),在Unicode标准中以4-6个十六进制数字表示。例如字母A的码位表示为U+0041。有了字符,计算机会把字符的码位通过某种算法转换为字节序列(二进制数据),就是我们通常所说的编码。相反,如果把字节序列通过某种算法转换为字符码位,就是常说的解码。字符串和字节序列关系总结如图1所示。
实例1:
>>>s = '中国'
>>>len(s) #1
2
>>>b = s.encode('utf-8') #2
>>>b
b'\xe4\xb8\xad\xe5\x9b\xbd' #3
>>>len(b) #4
6
>>>b.decode('utf-8') #5
'中国'
- '中国’字符串有2个Unicode字符
- 把str对象编码成bytes对象
- bytes字面量以b开头
- 字节序列b有6个字节
- 使用UTF-8把bytes对象解码为str对象