计算机编码发展简史

编码方式是编程中经常遇到的问题,如果编码/解码不同就会造成乱码的现象,好好了解一下编码的知识还是有用的。

经常见到的编码方式包括:ASCII,GB2312,GBK,Unicode,UTF-8

ASCII

ASCII码分为两部分,一部分是标准ASCII 码/基础ASCII码,另一部分是扩展ASCII码

计算机编码发展简史_第1张图片
image.png

标准ASCII是7位二进制数组合形成的128种字符,来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符,对于美国人来使用已经够用了。

一个字节有8位,它用掉了7位,所以就把最高位空了出来,用0占位。这样就形成了00000000 ~ 01111111的形式,具体可查看ASCII码表。

必须记住的是0 - 48,大写字母A - 65,小写字母a - 97,其他的可推算一下。

后来随着计算机的普及,传到欧洲的时候,新的问题出现了,基础ASCII码不能显示欧洲符号,于是他们就把在基础码中空出来的最高位占用了,也是128个字符,形成了扩展ASCII码,包含西欧语言、希腊语等等。

GB2312和GBK

等到计算机传到中国的时候,原来的一个字节全用完了(就算不用完,256个字符也不够啊,汉字远远大于256个,而且还不能和ASCII编码冲突)。于是在1980年,制定了中国汉字编码国家标准GB2312,占用两个字节的长度。1995年又制定了GBK,扩充了收录的汉字。

Unicode

为了统一所有文字的编码,Unicode应运而生。Unicode 又成为万国码,听名字就知道了它包含的范围更加广泛了,Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。它的出现解决了各个国家制定的自己的标准兼容问题,在多语言混合的文本中,不会显示出来乱码。

Unicode通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,高位字节全部用0填充。这样一来,乱码问题解决了,但是新的问题出现了。

原本只需要1个字节保存的ASCII也从1个字节变成了2个字节保存,白白浪费了一倍的存储和传输空间。

例如字符“0”
ASCII: 0011 0000
Unicode: 0000 0000 0011 0000
UTF-8

为了解决这个问题,UTF-8应运而生。UTF-8的特点是对不同范围的字符使用不同长度的编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。逐渐成为电子邮件、网页及其他存储或传送文字的应用中,优先采用的编码。

所以如果有人问你,汉字占几个字节的时候,不要再说2个字节了,因为在不同的编码中,汉字所占字节是不同的。
utf-8编码,一个汉字三个字节,一个字母一个字节。
Unicode编码,汉字、字母统一两个字节。

大致的发展历程就是这样的,后一种编码的出现总是为了解决前一种方法所带来的问题。

个人总结,如果错误,望指正。

你可能感兴趣的:(计算机编码发展简史)