在搜狗的设置里面有个选项,要用户选择使用GBK还是GB2312,论坛里面常常有人要求输入法支持BIG5编码,也有人提到
Unicode编码,那么这些东东都是什么意思呢?我查找资料不求甚解的了解了一下,把我的初步理解和大家分享一下吧:
-------------
ASCII字符编码
-------------
众所周知,计算机只能处理二进制数码,如何处理中英文以及其他形形色色的字符呢?这就需要用到字符编码。
最早的字符编码先从ASCII说起。ASCII是用来表示英文字符的一种编码规范,每个ASCII字符占用1个字节(8bits),因此,ASCII编码可以表示的最大字符数是256,其实英文字符并没有那么多,一般只用前128个(最高位为0),其中包括了控制字符、数字、大小写字母和其他一些符号。
而最高位为1的另128个字符被成为“扩展ASCII”,一般用来存放英文的制表符、部分音标字符等等的一些其他符号。但是扩展ASCII码没有真正的标准化,于是各个国家纷纷利用扩展ASCII制定了自己的文字编码规范,对于汉字来说,一个中文字符可以用两个扩展ASCII字符来表示。
-----------------
GB2312和Big5编码
-----------------
由于历史原因,当时利用扩展ASCII的汉字编码规范有三个:
GB2312-80,是中国大陆使用的国家标准,一共收录了7445个字符,包括6763个常用简体汉字和682个其它符号。
Big5,是中国台湾使用的编码标准,编码了台湾使用的繁体汉字,大概有8千多个。
HKSCS,是中国香港使用的编码标准,字体也是繁体,但跟Big5有所不同。
这3套编码标准都采用了两个扩展ASCII字节的方法,因此,几套编码互不兼容,而且编码区间也各有不同。因为其不兼容性,在同一个系统中同时显示GB和Big5基本上是不可能的,所以当时经常看到由于编码不符造成的乱码。当时的南极星、RichWin等等软件,在自动识别中文编码、自动显示正确编码方面都做了很多努力。
后来,国际上又制定了针对中文的统一字符集GBK和GB18030。
1995年的汉字扩展规范GBK1.0收录了21886个符号,其中包括21003个字符汉字。GBK兼容GB2312,并增加了大量不常用汉字,还加入了几乎所有的Big5中的繁体汉字。但是GBK中的繁体汉字和Big5中的几乎不兼容。
2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。GB18030相当于是GBK的超集,比GBK包含的字符更多。
从ASCII、GB2312、GBK到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。
----------------
Unicode字符编码
----------------
这时候,我们就知道,要真正解决中文问题,不能从扩展ASCII的角度入手,也不能仅靠中国一家来解决。而必须有一个全新的编码系统,这个系统要可以将中文、英文、法文、德文、日文、韩语、越南字喃……等等所有的文字统一起来考虑,为每个文字都分配一个单独的编码,这样才不会有上面那种互不兼容的现象出现。
于是,Unicode诞生了。Unicode是由国际组织(国际标准化组织ISO和Unicode协会)设计的一种字符编码方法,可以容纳全世界所有语言文字的编码方案。Unicode的学名"Universal Multiple-Octet Coded Character Set",简称为UCS。
在Unicode里,所有的字符被一视同仁。汉字不再使用“两个扩展ASCII”,而是使用“1个Unicode”,注意,现在的汉字是“一个字符”了,于是,拆字、统计字数这些问题也就自然而然的解决了。Unicode 16编码里面已经包含了GB18030里面的所有汉字(27484个字),目前Unicode标准准备把康熙字典的所有汉字放入到Unicode 32bit编码中。从理论上来说,Unicode能够表示世界上所有的书写语言中可能用于电脑通讯的字元、象形文字和其他符号。到了现在,Unicode标准已经不单是一个编码标准,还是记录人类语言文字资料的一个巨大的数据库,同时从事人类文化遗产的发掘和保护工作。
Unicode只与ASCII兼容(更准确地说,是与ISO-8859-1兼容),与GB码、BIG5码都不兼容。
----------------
非 Unicode 环境
----------------
在非 Unicode 环境下,由于不同国家和地区采用的字符集不一致,很可能出现无法正常显示所有字符的情况。微软公司使用了代码页(Codepage)转换表的技术来过渡性的部分解决这一问题,即通过指定的转换表将非 Unicode 的字符编码转换为同一字符对应的系统内部使用的 Unicode 编码。可以在“语言与区域设置”中选择一个代码页作为非 Unicode 编码所采用的默认编码方式,如936为简体中文GBK,950为繁体中文Big5(皆指PC上使用的)。在这种情况下,一些非英语的欧洲语言编写的软件和文档很可能出现乱码。而将代码页设置为相应语言中文处理又会出现问题,这一情况无法避免。从根本上说,完全采用统一编码才是解决之道。