之前写在GitHub Pages上,发表于2017-02-06。这篇是总结删改了多次得到的,可能之后理解更深会进一步修改吧
编码的前世今生
在人们不仅仅满足于计算机只有计算器功能而想要用其表示世界万物的时候,有一群人决定用8个可以表示两种状态的晶体管组合到一起以表示256
(2^8=256)种不同的状态,每种状态表示一个信息的话,这些状态就可以用来描述世界上的万物。至于为何会选用8个一组而不是1,2,3,4,5,……呢?因为CPU的硬件原理(这里不讨论物理)决定了选用2的次方比较利于计算机的运算,所以选择只剩下2,4,8,16,32,……而选用7个作为一组的话就有128
(2^7=128)种不同的组合,已经完全够表示所有的文字和符号(碍于当时的各种局限性,美国人只考虑了拉丁文26个字母的大小写、数字和一些(可显示)符号,以及一些控制符(比如回车))了,于是就近选择了8个作为一组。这样的8个一组的组合被他们强制规定称为字节
。而这128个不同的组合表达了哪些不同的字节,这就是ASCII码所规定的内容了。
ASCII编码的由来
这群人把这128
种状态按前后顺序编了个号,又规定从编号0开始到编号31的总共32种状态分别表示一种特殊用途,一但终端、打印机等遇上这些约定好的字节被传过来时,就要做一些约定的动作。比如遇上0x10
(0x后接十六进制数是十六进制表示法,这里的0x10表示编号为16的字节), 终端就换行;遇上0x07
, 终端的蜂鸣器就滴滴滴的叫;遇上0x1b
, 打印机就打印反色的文字(就是交换前景色背景色后打印),或者终端就用彩色显示文字。这些规定用了一段时间后发觉挺好使,于是这规定就正式确立下来,并把这些0x20以下的字节(编号0~31)称为控制码
/控制符号
。
他们又把所有的空格、标点符号、数字、大小写字母分别用连续的字节状态表示,一直编到了第127
号(共128个),这样计算机就可以用不同字节来表示英语这种语言的文字了。以上规定经使用后反响很好,于是大家都把这个方案确定下来,并称之为美国国家标准学会(American National Standards Institute,ANSI)的美国信息互换标准代码
(American Standard Code for Information Interchange,ASCII),也就是俗称的ASCII编码
。当时世界上几乎所有的计算机都用这样的ASCII编码方案来保存英文文字。
ASCII编码的扩展
计算机的运算、电子信息存储等优势展现出来以后,世界各地的都开始使用计算机,但是很多国家用的不是英文,他们的文字里有许多是ASCII编码表里没有的,为了可以在计算机保存他们的文字,他们决定采用127
号(第128个)之后到255
号(第256个)之间没有使用的空位来表示自己母语需要的字母、符号,同时还加入了很多画表格时需要用到的横线、竖线、交叉等形状的符号,一直把序号编到了最后一个字节——第255
号。从128到255这一部分的字符集被称扩展字符集
。
中国人自己的编码:国标(GB)
等到计算机起步较晚的中国人得到计算机时,已经没有可以利用的字节来表示汉字,况且常用汉字一再精简也仍有6000多个需要保存,哪怕256种字节全给咱也完全不够使。但是这难不倒智慧的中国人,咱们不客气地把那些127号之后的各种标准的符号们直接取消掉,并规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xB0(即十进制的176&