python之路---字符编码(改进版1)

1.什么是字符编码

    计算机是基于电工作的(产生高低电平),人们根据高低电平从逻辑的角度使高电平代表1,低电平代表0 ,所以机器语言的二进制编码是计算机所能直接认知的(无需转换),而无论是汇编语言还是高级语言它们的字符都需要根据某种映射关系使字符变成计算机所能理解的数字,这一过程就是字符编码

      字符  -------------(根据字符编码表)---------->数字

2:为什么要有字符编码?

       对于计算机,是将人类所写的字符转换为计算机所能理解的二进制数字,提供计算机使用

       对于人类,是将计算机内存储的二进制转换为人类所能直观理解的字符,提供人类使用

 编码表发展

3.1 最初的字符编码表

         计算机是美国人发明的,美国人使用的英文字符,加上符号字符,有一百多种,而一位二进制所代表的状态为两种,所以美国人用8位二进制数(256种状态)来映射字符到数字的对应关系(第八位用于扩展,后来也加拉丁文写入),这个编码表就是ASCLL码  --->一个字符用八个bit表示,即一个字节

3.2 各国编码表的诞生

          随着计算机在世界的普及,各国人发现ASCLL码并没有将自己国家的语言字符纳入映射关系中,而且8位的二进制所能代表的状态也远远不够,所以出现了中国的GBK,以16位二进制数代表一个中文字符,8位代表一个英文字符(区分中文英文则靠高字节,连续两个高字节即为中文),以及Shift_JIS编码(日本),Euc-kr编码(韩国)

3.3 unicode的诞生

        各国码的诞生解决了自己国家的问题,但是用中国GBK编码写出来的软件美国能使用吗?为什么?

         3.3.1 与程序运行有关的三大硬件:cpu,内存,硬盘

         3.3.2  如何运行python程序?  

                  1.python解释器从硬盘加载到内存中 

                  2.存储python的文本文件从硬盘加载到内存中

                  3.python解释器执行python语句(也只有这一阶段涉及到语法的概念)

         3.3.3 在这个阶段,将字符写到硬盘的过程:字符  --根据GBK/-Shift_JIS/-Euc-kr->内存(临时存储这些格式的二进制)---->硬盘中(这些格式的二进制)

       那么,对于根据GBK写入的数据,依照ASCLL是无法完成从内存二进制到字符转换过程的,由此诞生了unicode一个包含unicode二进制对应-------->字符<-----各国编码二进制对应的映射表(这是unicode必须拥有的特点,用于解决历史问题),另一个特点就是兼容万国,将所有国家的字符纳入映射关系(用于统一,但这要时间)  ------->unicode用2个bytes表示所有字符,也固定了内存中使用的就是unicode字符编码

3.4:utf-8的诞生

     由于unicode是用2个bytes表示任何字符的(英文字符前八位全部补零),对于通篇的英文字符来说,多余的I/O操作使传输速度变慢,再者内存资源的浪费,所以出现了utf-8(unicode transfoemation format),采用一个字节表示英文字符,三个字节表示中文字符(生僻字可能更多)...

 展望:对于旧的软件(用各国编码标准编写的)---->用unicode所包含的unicode二进制  ----->字符 <-------各国编码二进制的映射关系解决乱码问题,对于新程序统一用utf-8字符编码格式写入硬盘,待旧程序不再使用后,内存中使用utf-8编码,这时乱码问题不再存在,而且,从内存到硬盘中,直接可以将utf-8格式的二进制写入硬盘(无需转换)

猜你喜欢

转载自blog.csdn.net/ltfdsy/article/details/81201009