python-字符编码1
字符编码应用于字符串和文本文件类型。字符串类型、文本文件的内容都是由字符组成的,但凡涉及到字符的存取,都需要考虑字符编码的问题。
字符编码这个知识点的典型特征就是理论多、结论少,但对于开发而言只需要记住结论即可
一.知识储备
1.大核心硬件
(1)软件运行前,代码及其相关数据都是存在在硬盘中
(2)任何软件的启动都是将数据从硬盘中读入内存,然后cpu从内存中取出指令执行
(3)软件运行过程当中产生的数据最先都是存放在内存当中的
2.文本编译器读取文件内容的流程
阶段1:启动一个文件编辑器(文本编辑器如nodepad++,pycharm,word)
阶段2:文件编辑器会将文件内容从硬盘读入内存
阶段3:文本编辑器会将刚刚读入内存中的内容显示到屏幕上
3.python解释器执行文件流程
阶段1:启动python解释器,此时就相当于启动了一个文本编辑器
阶段2:python解释器相当于文本编辑器,从硬盘上将test.py的内容读入到内存中
阶段3:python解释器解释执行刚刚读入的内存的内容,开始识别python语法
4.python解释器和文本解释器的异同
(1)相同点
前两个阶段二者完全一致,都是将硬盘中文件的内容读入内存
python解释器是解释执行文件内容的,因而python解释器具备读py文件的功能,这一点与文本编辑器一样
(2)不同点
在阶段3时,针对内存中读入的内容处理方式不同
文本编辑器将文件内容读入内存后,是为了显示或者编辑,根本不去理会python的语法,而python解释器会识别python语法,当功能去执行
二.字符编码介绍
1.什么是字符编码
人类与计算机交互时用的是人类可以读懂的字符,而计算机只能识别二进制,二进制是由01代码组成
翻译的过程必须参照一个特定的标准,该标准称之为字符骗码表,该表上存放的就是字符与数字一一对应的关系。
字符编码中的编码指的是翻译或者转换的意思,即将人能理解的字符翻译成计算机能识别的数字
输入一个字符,计算机将翻译成计算机识别的数字,再将这个数字翻译成输入的字符
上------------>翻译------------->010101------------->翻译------------->上
三.字符编码发展史
第一阶段:一家独大
现代计算机起源于美国,所以最先考虑仅仅是让计算机识别英文字符,于是诞生了ASClI表
ASCII表的特点:
1、只有英文字符与数字的一一对应关系
2、一个英文字符对应1Bytes,1Bytes=8bit,8bit最多包含256个数字,可以对应256个字符,足够表示所有英文字符
ASCII表只支持英文字符串
ASCII表采用8位二进制数对应一个英文字符
第二阶段:天下大乱
为了让计算机能够识别中文和英文,中国人定制了GBK
GBK表的特点:
1、只有中文字符、英文字符与数字的一一对应关系
2、采用8位二进制数对应一个英文字符
3、采用16位二进制数对应一个中文字符
补充说明:
1Bytes=8bit,8bit最多包含256个数字,可以对应256个字符,足够表示所有英文字符
2Bytes=16bit,16bit最多包含65536个数字,可以对应65536个字符,足够表示所有中文字符
每个国家都各自的字符,为让计算机能够识别自己国家的字符外加英文字符,各个国家都制定了自己的字符编码表
Shift_JIS表的特点:
1、只有日文字符、英文字符与数字的一一对应关系
Euc-kr表的特点:
1、只有韩文字符、英文字符与数字的一一对应关系
此时,美国人用的计算机里使用字符编码标准是ASCII、中国人用的计算机里使用字符编码标准是GBK、日本人用的计算机里使用字符编码标准是Shift_JIS
文本文件内容全都为字符,无论存取都是涉及到字符编码问题
1、存文本文件
人类通过文本编辑器输入的字符会被转化成ASCII格式的二进制存放于内存中,如果需要永久保存,则直接将内存中的ASCII格式的二进制写入硬盘
2、读文本文件
直接将硬盘中的ASCII格式的二进制读入内存,然后通过ASCII表反解成英文字符
阶段三:分久必合
unicode(内存中统一使用unicode):
1.兼容万国字符
与万国字符编码都有对应关系
2.采用16(16bit=2Bytes)位二进制数对应一个中文字符
个别生僻字会采用4Bytes,8Bytes
unicode表:
人类字符----------------unicode格式数字
字符编码不可以互相转,老的字符编码都可以转成unicode,但是不能通过unicode互转