(一)字符串和编码

    计算机只能处理数字,如果要处理文本,那么就先将文本转换为数字。最开始,一个字节(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

你可能感兴趣的:((一)字符串和编码)