深入理解python字符编码(包含2.x与3.x)

Posted py-coder

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解python字符编码(包含2.x与3.x)相关的知识,希望对你有一定的参考价值。

引子

计算机要想工作必须通电,即用‘电’驱使计算机干活,也就是说‘电’的特性决定了计算机的特性。电的特性即高低电平(人类从逻辑上将二进制数1对应高电平,二进制数0对应低电平),关于磁盘的磁特性也是同样的道理。

结论:计算机只认识数字,很明显我们平时在使用计算机时,用的都是人类能读懂的字符(用高级语言编程的结果也无非是在文件内写了一堆字符),

如何能让计算机读懂人类的字符?必须经过一个过程:

  字符--------(翻译过程)------->二进制数字010101
  这个过程实际就是一个字符如何对应特定数字的标准,这个标准称之为字符编码。实际上是一种对应的规则

 

历史的变化

  • ASCII
美国标准信息交换代码(American Standard Code for Information Interchange)的缩写, 为美国英语通信所设计。它由128个字符组成,包括大小写字母、数字0-9、标点符号、非打印字符(换行符、制表符等4个)以及控制字符(退格、响铃等)组成。

python2只支持ASCII码,开始阶段使用7位二进制数表示——数字/字母/特殊字符,即是2**7 == 128,后来改为了用8位来表示,所以ASCII码的第一位都是0开头。2**8 = 256个字符。
  • unicode
随着计算机在各个国家的普及,各个国家的语言在计算机中的应用,不得不从新规划一种编码,这种编码可以对应几乎世界上所有国家的语言文字与一些特殊字符,此时unicode出现了,刚开始使用16位2个字节来表示字符,2**16 == 65536 ,可以有这么的多的表示个数。但是由于中文的原因,事实上这也是不够的。在python2中,使用的是16位的unicode,但是在python3中,就开始统一使用32位4个字节来表示字符,2**32 ==4294967296,完全足够表示所有的字符。由于unicode必须要兼容所有国家的语言,所以他必须以消耗大量的内存来换取兼容性。由此,一种可变长的编码规范utf-8,utf-16诞生。
  • utf-8

全称:UTF-8(8-bit Unicode Transformation Format)。

是一种针对Unicode的可变长度字符编码,又称万国码,由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码Unicode字符。用在网页上可以统一页面显示中文简体繁体及其它语言。简单理解,他可以针对不同的字符,采用不同字节数1~6个来表示,这样可以达到兼容性和节省空间。而8位1个字节表示的utf-8是对ASCII码友好的,所以使得utf-8迅速的流行起来,不过由于中文文字复杂而且多的特点,gkb编码规范出现,但是只是针对中文。

  • gbk

GBK全称《汉字内码扩展规范》(GBK即“国标”、“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Specification)。GBK 向下与 GB 2312 编码兼容。GBK是采用单双字节变长编码,英文使用单字节编码,完全兼容ASCII字符编码,中文部分采用双字节编码

具体编码方式

unicode: 16位 2个字节 由于中文原因 ---> 32位 4个字节 表示一个字符

utf-8: 英文字母数字特殊字符  8位 1个字节 表示一个字符

        欧洲 16位 2个字节 表示一个字符

        中文 24位 3个字节 表示一个字符

gbk:英文数字特殊字符 8位 1个字节

    中文 16位 2个字节

拓展:字节与位的关系

通常用bit来作数据传输的单位,因为物理层,数据链路层的传输对于用户是透明的,而这种通信传输是基于二进制的传输。在应用层通常是用byte来作单位,表示文件的大小,在用户看来就是可见的数据大小。比如一个字符就是1byte,如果是汉字,则是2byte。

Bit意为“位”或“比特”,是计算机运算的基础,属于二进制的范筹;

Byte意为“字节”,是计算机文件大小的基本计算单位;

八位表示一个字节
1byte == 8bit
1024byte == 1kb
1024kb == 1MB
1024MB == 1GB
1024GB == 1TB

 









以上是关于深入理解python字符编码(包含2.x与3.x)的主要内容,如果未能解决你的问题,请参考以下文章

python2和python3 的区别

深入理解Python字符编码

深入理解H5斗公牛开发的Python字符编码

Python中文乱码

深入理解pythonpython字符编码和字符串处理

第三章 函数练习题