计算机编码
摘自哪忘了…
2.建造巴比伦塔
2.1 ascii ASC II
美国人想用这些状态表达更多的信息,所以就决定把这些状态分别规定特殊的用途 所以一直编到了 第127号.这时候计算机就可以用不同的字节来存储英语或字符了这时这种方案 的名字就叫做 ANSI 的"Ascii"编码(American Standard Code for Information Interchange,美国信息互换标准代码)
2.2 "DBCS"(Double Byte Charecter Set 双字节字符集)
2.2.1 GB2312
不久之后。。。。。世界各地开始使用计算机,他们的语言不是英文,怎么表示呢?
因为美国人之编到了第127位。所以他们决定把127位之后的空位表示新的字母,符号。。。一直搞到最后一个状态255
历史终于转到我们中国了 ,我们中国人开始使用计算机, 这时候还哪有字节状态来表示汉字?而且汉子几千上万怎么保存?我们中国人智慧超群,怎么可能难得倒我们.把127号之后的乱七八糟字符直接PASS掉 规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字(前面的一个字节(称之为高字节)从0xA1用到0xF7,后面一个字节(低字节)从0xA1到0xFE)
这样就组合了7000多简体汉字,就连以前在ASCII有的数字,标点,字母也重新编了 两个字节的编码 这就是 全角(127号以下的那些就叫"半角"字符)这种方案 就是最初的 GB2312 (也就是说是对ASCII 的中文扩展)
2.2.2 GB2312 的扩展 GBK 和GB18030
由于汉字太多 ,GB2312 感觉不够用 所以又做了一个扩展 :不再要求低字节也是127号之后
这种方案 就是GBK 了 这时候可以有26000多的汉字了
少数民族要用电脑怎么办? 于是继续扩展 加了几千个新的少数民族的字 GBK 扩成了 GB18030
2.2.3 "DBCS"
中国的程序员把这些编码通称为 "DBCS"(Double Byte Charecter Set 双字节字符集)
在DBCS系列标准里,最大的特点是两字节长的汉字字符和一字节长的英文字符并存于同一套编码方案里,因此他们写的程序为了支持中文处理,必须要注意字串里的每一个字节的值,如果这个值是大于127的,那么就认为一个双字节字符集里的字符出现了
3. 统一乱世。
3.1 iso 的 UCS, 俗称 "UNICODE"
这时候乱了,每个国家都搞一套编码。。(那不是乱码满天飞)。。怎么办呢。。。
一个叫ISO (国际标谁化组织)的国际组织出现,统一乱世。
废了所有的地区性编码方案,重新搞一个包括了地球上所有文化、所有字母和符号的编码!他们打算叫它"Universal Multiple-Octet Coded Character Set",简称 UCS, 俗称 "UNICODE"。 世界和平了。。。。
UNICODE 开始制订时,计算机的存储器容量极大地发展了,空间再也不成为问题了。于是 ISO 就直接规定必须用两个字节,也就是16位来统一表示所有的字符,对于ascii里的那些“半角”字符,UNICODE 保持其原编码不变,只是将其长度由原来的8位扩展为16位,而其他文化和语言的字符则全部重新统一编码。由于"半角"英文符号只需要用到低8位,所以其高8位永远是0,因此这种大气的方案在保存英文文本时会多浪费一倍的空间。
在中国“一个汉字,两个英文字符”的时代过去了。。。
从这时开始,WINDOWS 系统 把所有的核心代码都改成了用 UNICODE 方式工作的版本 所以无需加装各种本土语言系统就可以显示全世界上所有文化的字符了。
3.2 ucs 的方案
UNICODE 是用两个字节来表示为一个字符,他总共可以组合出65535不同的字符,这大概已经可以覆盖世界上所有文化的符号。如果还不够也没有关系,ISO已经准备了UCS-4方案,说简单了就是四个字节来表示一个字符,这样我们就可以组合出21亿个不同的字符出来(最高位有其他用途),这大概可以用到银河联邦成立那一天吧!
3.3 UNICODE 的传输
现在就只剩下传输问题了。。。
于是面向传输的众多 UTF(UCS Transfer Format)标准出现了,顾名思义,UTF8就是每次8个位传输数据,而UTF16就是每次16个位,只不过为了传输时的可靠性,从UNICODE到UTF时并不是直接的对应,而是要过一些算法和规则来转换。
关于UTF-8编码与GB2312编码的冲突也有个很有意思的事:就是联通之所以拼不过移动的原因。
为什么在记事本上写 联通 会是乱码 看一下他们之间的转换规则就可以知道了。。