编码简史

起源


我们都知道计算机诞生于美国;起初,美国人想到了用8位作为一个字节来传输数据,并使用0~127表示他们常用的文字与符号,其中也包括$(美元符号);并将这份编码表作为一个标准在美国流通起来,人们把这份编码称之位美国标准信息交换码American Standard Code for Information Interchange,它的缩写我们大家可能都耳熟能详,叫做ASCII码表。

英文字母对应ASCII码

 A-Z:65~90,a~z:97~122

发展


后来,这边编码流传到了欧洲,英国人发现当前编码没有办法表示£(英镑符号),正好ASCII也只用过了0 ~ 127,于是他们把128 ~ 255也应用了起来,所以128 ~ 255被称为ASCII扩展码;信息的魅力在于传播跟应用,这份字符集也传入了中国,中国文化博大精深,源远流长,常用汉字6000+,全部汉字有数万个;我们维持了0 ~ 127的原意,并毫不客气的将127位之后的杂七杂八的符号全部取消掉,当两个大于127的字符在一起时就表示一个汉字;前面一个字节称之为高位(0xA1 ~ 0xF7),后面一个字节称之为低位(0xA1 ~ 0xFE);这份编码便是鼎鼎有名的GB2312,其实是ASCII的中文扩展。

然而汉字实在是太多了,随后他们干脆不再要求低位必须大于127;对GB2312又进行了一次扩展,这份扩展被称为GBK,GBK完全兼容GB2312,并新增了2W多个汉字;再后来少数民族也开始使用计算机,我们又加入了少数民族的文字,GBK又被扩展成了GB18030;从此之后,中华大地的文明便可以在计算机的世界里流通了;由于是有两个字节组成的,所以被称为双字节字符集Double Byte Charecter Set简称DBCS,所以早年就有了一个汉字,两个字符的计算机口诀。

就这样每个国家和地区都有了一套自己的扩展,各个扩展之间互不兼容,所以有一个组织国际标准化组织(ISO),开始关注并着力于解决这一问题。于是,他们废除各地区的编码标准,准备自己撸起袖子,起草一份统一的编码,届时计算的存储容量也得到了发展,他们于是直接大方的规定有两个字节表示一个字符,并旨在统一表示地球上所有的文字与符号,它也有一响亮的名字,Universal Multiple-Octet Coded Character Set,简称 UCS, 俗称 unicode

升华


但是,所有的字符都需要占用两个字节,英文等需要的存储空间较原来增加了一倍,一向精打细算的人们不愿意了。unicode在很长一段时间内无法推广,直到互联网的出现,为解决unicode如何在网络上传输的问题,出现了UCS Transfer Format 简称UTF;顾名思义UTF-8就是表示每8位传输数据,UTF-16表示每16位传输数据;这样使得编码无国界,可以传输全世界所有文化的字符,从此汉字不在是两个字符,而是一个字符。

UTF-8最大的一个特点,就是它是一种变长的编码方式。它可以使用1 ~ 4个字节表示一个符号,根据不同的符号而变化字节长度,当字符在ASCII码的范围时,就用一个字节表示,保留了ASCII字符一个字节的编码做为它的一部分,注意的是unicode一个中文字符占2个字节,而UTF-8一个中文字符占3个字节)。从unicode到uft-8并不是直接的对应,而是要过一些算法和规则来转换。

从unicode到uft-8并不是直接的对应,而是要过一些算法和规则来转换。

Unicode符号范围(2个字节) | UTF-8编码方式 (1~4个字节)

(十六进制) | (二进制) 
—————————————————————– 
0000 0000-0000 007F | 0xxxxxxx 
0000 0080-0000 07FF | 110xxxxx 10xxxxxx 
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx 
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

你可能感兴趣的:(编码简史)