由于历史原因, 字符在内存中的编码都是Unicode, 但是对于一些数字或英文字符, 那么用Unicode就会严重浪费空间和带宽,所以在硬盘上或网络传输上的字符编码大多都是utf-8的.
Str
汉字‘严’在python中的字符表示有两种
可以用ord()
查看字符的整数表示.
20005的16进制数就是4E25, 正是\u4E25
.
可以用chr()
将整数转换为相应的字符
Bytes
使用b''
方式来表达一个bytes, 虽然显示出来是一样的,但内部存储方式是不同的.
以Unicode表示的str通过encode('utf-8')
转为bytes:
从硬盘等其他地方获取的bytes用decode('utf-8')
转换为str:
长度
len()函数对于str计算的是字符数,对于bytes计算的是字节数.
1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节.
ps. 之前计算过严->4E25->E4B8A5
3个字节存储.