编码问题起源:
计算机只认0与1,要使计算机可以表示人类认识的符号标志,就要使用编码来表示了。最初计算机是美国人发明的,他们为了表示英文字母和一些标点,就发明了ASCII码。然后计算机到了欧洲,ASCII码无法满足欧洲人的需求就有了扩展的ASCII码。后来计算机到了中国,中国人发现自己的文字在计算机上无法显示,就发明了GB2312编码。最后就发展到不同的国家就有不同的实现。
这样就可以解决了自己国家的问题了,不过随着互联网的普及,不同国家的通讯愈来愈频繁了,就发生了乱码的问题了。后来有人为了解决这个问题,就发明了一套Unicode的编码了。
下面介绍几个重要的编码:
1.ASCII
用一个字节(如0000 0000)即两个十六进制数(如FF)表示,可表示256个状态,但只取其中的128个有用字符(该字节的最高位没有用到,为0)。
2.可扩展的ASCII编码。
主要是欧洲国家使用,使用了ASCII码的高位表示更多的符号,有多个不同的扩展。主要的是ISO8859-1编码(拉丁语系)。
3.GB2312->GBK->GB13000
ASCII码无法表示中文。中国人就使用GB码表示,GB2312,GBK,GB13000就是其中的各个标准。最主要的不同就是收录的汉字多少不同,但是编码是兼容的。
4.BIG5
繁体中文的编码,主要是用于台湾和香港。
5.Unicode
Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。内容包含符号6811个,Unicode于1992年6月通过DIS(Draf International Standard),目前版本V2.0于1996公布,汉字20902个,韩文拼音11172个,造字区6400个,保留20249个,共计65534个。Unicode编码后的大小是一样的.例如一个英文字母 "a" 和 一个汉字 "好",编码后都是占用的空间大小是一样的,都是两个字节。
5.UTF-8
UTF-8是Unicode的实现方式之一。
因为对于英文字母,unicode也需要两个字节来表示。所以Unicode不便于传输和存储。因此而产生了UTF编码,UTF编码兼容ISO8859-1编码,同时也可以用来表示所有语言的字符,不过,UTF编码是不定长编码,每一个字符的长度从1-6个字节不等。另外,UTF编码自带简单的校验功能。一般来讲,英文字母都是用一个字节表示,而汉字使用三个字节。
注意,虽然说utf是为了使用更少的空间而使用的,但那只是相对于unicode编码来说,如果已经知道是汉字,则使用GB2312/GBK无疑是最节省的。不过另一方面,值得说明的是,虽然utf编码对汉字使 用3个字节,但即使对于汉字网页,utf编码也会比unicode编码节省,因为网页中包含了很多的英文字符。
感受:
总觉得有很多关于编码的细节没写,不过想了下,具体细节Google一下就可以找到了,就写了下感受较深的东西吧。另外,在我们的应用程序中,我觉得我们能用utf8就尽量使用utf8的编码。也算是为标准化做下贡献吧。