Python 字符编码原理与历史演进
字符编码应用于字符串和文本文件类型。字符串类型、文本文件的内容都是由字符组成的,但凡涉及到字符的存取,都需要考虑字符编码的问题。
字符编码这一知识点理论较多,但对于开发而言,掌握核心结论即可。
一、知识储备
1. 核心硬件流程
- 软件运行前,代码及相关数据存储在硬盘中。
- 任何软件的启动都是将数据从硬盘读入内存,然后 CPU 从内存中取出指令执行。
- 软件运行过程中产生的数据最先存放在内存当中。
2. 文本编辑器读取文件内容的流程
- 阶段 1:启动一个文件编辑器(如 Notepad++、PyCharm、Word)。
- 阶段 2:文件编辑器将文件内容从硬盘读入内存。
- 阶段 3:文本编辑器将刚刚读入内存中的内容显示到屏幕上。
3. Python 解释器执行文件流程
- 阶段 1:启动 Python 解释器,此时相当于启动了一个文本编辑器。
- 阶段 2:Python 解释器从硬盘上将 .py 文件的内容读入到内存中。
- 阶段 3:Python 解释器解释执行刚刚读入内存的内容,开始识别 Python 语法。
4. Python 解释器和文本编辑器的异同
(1) 相同点
前两个阶段二者完全一致,都是将硬盘中文件的内容读入内存。Python 解释器是解释执行文件内容的,因而具备读取 .py 文件的功能,这一点与文本编辑器一样。
(2) 不同点
在阶段 3 时,针对内存中读入的内容处理方式不同。文本编辑器将文件内容读入内存后,是为了显示或者编辑,根本不去理会 Python 的语法;而 Python 解释器会识别 Python 语法并去执行功能。
二、字符编码介绍
1. 什么是字符编码
人类与计算机交互时用的是人类可以读懂的字符,而计算机只能识别二进制(由 0 和 1 组成)。
翻译的过程必须参照一个特定的标准,该标准称之为字符编码表,该表上存放的就是字符与数字一一对应的关系。字符编码中的'编码'指的是翻译或者转换的意思,即将人能理解的字符翻译成计算机能识别的数字。
输入一个字符,计算机将其翻译成计算机识别的数字,再将这个数字翻译成输入的字符。
过程示意:上 -> 翻译 -> 010101 -> 翻译 -> 上
三、字符编码发展史
第一阶段:一家独大
现代计算机起源于美国,所以最先考虑仅仅是让计算机识别英文字符,于是诞生了 ASCII 表。
ASCII 表的特点
- 只有英文字符与数字的一一对应关系。
- 一个英文字符对应 1 Bytes(1 Bytes = 8 bit)。8 bit 最多包含 256 个数字,可以对应 256 个字符,足够表示所有英文字符。
- ASCII 表只支持英文字符串,采用 8 位二进制数对应一个英文字符。
第二阶段:天下大乱
为了让计算机能够识别中文和英文,中国人定制了 GBK。
GBK 表的特点
- 只有中文字符、英文字符与数字的一一对应关系。
- 采用 8 位二进制数对应一个英文字符。
- 采用 16 位二进制数对应一个中文字符。
补充说明
- 1 Bytes = 8 bit,8 bit 最多包含 256 个数字,可以对应 256 个字符,足够表示所有英文字符。
- 2 Bytes = 16 bit,16 bit 最多包含 65536 个数字,可以对应 65536 个字符,足够表示所有中文字符。


