Python学习【1.1.2】-字符编码

版权声明:版权所有,翻版必究【Kevin】 https://blog.csdn.net/weixin_30935137/article/details/83689240

字符编码

A)文本与解释器

1)文本编辑器存取文件的原理(nodepad++/pycharm/word等)

打开编辑器就打开了启动了一个进程,是在内存中,所以在编辑器编写的内容也是存放在内存中,断电后数据丢失,所以需要保存到硬盘上,点击保存按钮之后,就从内存中把数据刷到了硬盘上。

2)python解释器运行py文件的原理,例如python test.py

第一阶段:python解释器启动,此时相当于启动了一个文本编辑器
第二阶段:python解释器相当于文本编辑器,去打开test.py文件,从硬盘上将test.py的文件内容读取到内存中
第三阶段:python解释器解释执行刚刚加载到内存中的test.py的代码

B)字符(人)与字节(机器)

字节:是比较底层的概念,就是计算机里的0和1的组合,8个为一个字节
字符:一个字符不等价于一个字节,字符是人类能够识别的符号(比如汉字,标点,字母等)。因为我们平时交流用的记号都是字符,而计算机存储,计算需要的是0和1的字节数据。这样就存在一个映射关系,就是字符与字节的映射关系
所以: 形成了人看字符,机器看字节。而字节与字符的转换就称为解码与编码,这个过程就需要指定转换规则,这个规则就是编码规则,比如utf8,ascii,gbk。

C)字符编码的发展史

阶段1:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII

1)ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以表示0-2**8-1种变化,即可表示256个字符。

2)ASCII最初只用了后七位,127个数字,已经可以完全代表键盘上所有字符了(英文字符/键盘的所欲其他字符)。后来为了将拉丁文也编码进了ASCII,将最高位也占用了

阶段2:为了满足中文,中国人定制了GBK

1)GBK:2Bytes代表一个字符

2)为了满足其它国家,各个国家也就定制了自己的编码。日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里

阶段3:各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码

1)基于上面所述,所以就有了unicode,统一用2Bytes 代表一个字符,2**16-1 = 65535,可代表6万多个字符,因而兼容万国语言

2)但是对于通篇都是英文的文本来说,这种编码方式无疑是多了一倍的存储空间(二进制最终都是以点或者磁的方式存储到存储介质中的)

3)于是产生了utf-8,对英文字符只用1Bytes表示,对中文字符用3Bytes

注意

1)unicode:简单粗暴,所有字符都是2Bytes,优点是字符->数字的转换速度快, 缺点是占用空间大
2)utf-8:精准,对不同的字符用不同的长度表示,优点是节省空间,缺点是:字符->数字的转换速度慢,因为每次都需要计算出字符需要多长的Bytes才能够准确表示

D)python中的默认编码

Python2的默认解码ASCII,不能识别中文字符,这个当初utf8编码成字节文件就不能被解释器正确解码。在代码前面需要加 # -*- coding:utf-8 -*-

Python3默认的是utf8,不需要加 # -*- coding:utf-8 -*- 也可以

猜你喜欢

转载自blog.csdn.net/weixin_30935137/article/details/83689240