GB2312、GBK、BIG5、Unicode及字符编码基础知识

GB2312、GBK、BIG5、Unicode及字符编码基础知识

在搜狗的设置里面有个选项,要用户选择使用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上使用的)。在这种情况下,一些非英语的欧洲语言编写的软件和文档很可能出现乱码。而将代码页设置为相应语言中文处理又会出现问题,这一情况无法避免。从根本上说,完全采用统一编码才是解决之道。

支持Unicode必然是大势所趋,但要首先解决的是操作系统的字符集和字库的问题。就拼音输入法来说其实不是太麻烦,首先编码上很容易,仅仅是多些字、多些读音。而那些生僻字构词又极少,对词库的干扰自然很小。加上那些日韩汉字基本是用不上的,可以不作考虑。所以在输入法开发方来说工作量有限。

 

Unicode还在发展,目前用内码、区位码的方式可以输入不少Unicode3.1里的汉字(是不是全部我不知道,我想至少含多奇怪的日韩汉字是不支持的吧。),而常用输入法的编码似乎没有跟上。像海峰五笔用86版是仅有的支持国际超大字集的流行输入方式。拼音输入法基本上还停留在GBK上。而即便可以用海峰打出很多生僻字来,但在多数缺少专门字库支持的电脑上是无法正常显示的。所以,关键还是操作系统自身对Unicode的支持。

你可能感兴趣的:(杂项)