引子
计算机要想工作必须通电,即用‘电’驱使计算机干活,也就是说‘电’的特性决定了计算机的特性。电的特性即高低电平(人类从逻辑上将二进制数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 == 8bit1024byte == 1kb1024kb == 1MB1024MB == 1GB1024GB == 1TB
原文地址:https://www.cnblogs.com/py-coder/p/10036429.html