计算机只能处理数字,如果要处理文本,那么就先将文本转换为数字。最开始,一个字节(bytes
)有8个(bit
)‘11111111’,一个字节表示的最大整数是255。ASCII编码只把大小写英文字母、数字和一些符号编码到计算机。但是要处理中文的时候,需要至少两个字节,所以中国就制定了GB2312编码。
unicode将全世界所有语言都统一到一套编码里面了。unicode使用两个字节进行编码,多余的位置用0补全。当存储的全都是英文的时候,就会导致浪费存储空间,因为英文只需要一个字节存储就够了。
因此,又出现了把 unicode
编码转化为可变长编码的‘UTF-8’编码。UTF-8
编码把一个 unicode
字符根据不同的数字大小编码成1-6个字节。英文为1字节,中文3个字节。
计算机系统通用的字符编码工作方式:
在计算机内存中,统一使用 unicode
编码(因为内存快),当需要保存到硬盘或传输的时候,就转换为 UTF-8
编码。
用记事本编辑的时候,从文本读取的 UTF-8
字符被转换为 unicode
字符保存到内存中,编辑完成后,保存的时候,再把 unicode
转换为 UTF-8
保存到文件。
浏览网页的时候,服务器会把动态生成的 unicode
内容转换为 UTF-8
再传输到浏览器。
由于python
的字符串是 str
,在内存中以 unicode
表示,一个字符对应若干个字节。如果要在网络上传输,或保存到磁盘上,就需要把 str
变为以字节为单位的 bytes
。
‘ABC’
和b‘ABC’
,虽然显示的内容一样,但前者是 ·str·,而且bytes
的每个字符只占用一个字节,python
的一个字符可以占用几个字节。
以 unicode
表示的 str
通过 encode()
方法可以编码为指定的bytes
:
'ABC'.encode('UTF-8')
反过来,如果我们在网站上读取了字节流,那么读到的就是 bytes
。将 bytes
变为 str
,就需要用 decode()
方法:
b'ABC'.decode()
len()
计算 str
的字符数:
len('ABC')
3
len('中文')
2
len()
计算 bytes
的字节数:
len(b'ABC')
3
len(b'中文')
6
网友评论