编码格式漫谈

编码格式

本次总结并不旨在解决代码细节上的问题,而是为了对编码格式有一个树形的整体理解。

1、什么是编码格式    

       计算机只能读懂01,它是看不懂什么abcd,你好,@#这种字符的,这时候就需要通过人为的预先规定的方法,讲文字、数字和其他对象写成编码。例如,我们规定 字母A的编码为01000001,转化成十进制就是65。也就是说在我们 输入A之后和CPU得到指令之前,把“翻译”成了01000001。

2、为什么是01000001(ASCII)

       这边我解释不了为什么是01000001,而不是00000000,这个跟编码的算法有关,谁知道他是用什么哈弗曼编码还是其他的什么(应该不是哈弗曼编码,因为他是可变字长的)。但是,为什么是8位,是有一定的道理的。

       因为最早的计算机设计时采用8个bit作为一个字节。所以一个字节可以表示从00000000-11111111,一共255种表示方法。当时只考虑了abCD#@&123这样的一共127个字母、符号和数字,没有考虑汉字,所以认为255种格式就够了,于是有了ASCII编码。其中A——01000001、O——00110000。

3、中文编码

       显然,用一个字节对中文进行编码是不够的,字少需要两个字节。所以就制定了GB2312编码,用来把中文编进去。

4、国际编码

       这样就出现了“百花齐放”的局面,世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,各个国家有自己的编码格式ISO 8859-1

编码格式漫谈

虽然在不同的国家中广泛地使用,可是在不同国家间却经常出现不兼容的情况。这就需要制定一个国际化的标准——Unicode编码。ASCII编码是一个字节,Unicode通常是两个字节。

编码格式漫谈

5、UTF-8

       那么UTF-8又是什么东西?设想一下,如果一个文本基本上全是英文(有一点中文的话),那岂不是用Unicode编码比ASCII编码需要多一倍的存储空间。于是又出现了可变字长的UTF-8编码(这个编码方法就可能是哈弗曼了哈哈,开玩笑,我也不清楚)。UTF-8把Unicode字符根据不同数字大小编码成了1-6字节,常用的英文字母一个字节,汉子三个字街,生僻字4-6字节。

编码格式漫谈

总体上来看,UTF-8还有个好处,那就是包容了ASCII编码。

 

到此为止,我们理清了ASCII,Unicode和UFT-8的大概关系。(当然还有ISO 8859家族)。