中文编码

来自Ubuntu中文
跳到导航跳到搜索

汉字编码

本文作者:FireHare

授权许可:创作共用协议

编辑人员:FireHare

校对人员:FireHare

适用版本:所有

文章状态:完成



中文文本的基本组成单位是汉字。目前我国汉字总数已超过6万字。汉字的数量大、字形复杂、同音字多、异体字多等特点给汉字在计算机内部的表示、处理、传输、交换、输入、输出带来了一系列的问题,同时也给汉字编码工作带来了相当大的难度。我国汉字编码方案有多种,主要有以下几种编码方案:

GB2312-80 编码

GB2312码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集--基本集》,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。

GB2312收录简化汉字及符号、字母、日文假名等共7445个图形字符,其中汉字占6763个。GB2312规定“对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示”,习惯上称第一个字节为“高字节”,第二个字节为“低字节”。GB2312-80包含了大部分常用的一、二级汉字,和9区的符号。该字符集是几乎所有的中文系统和国际化的软件都支持的中文字符集,这也是最基本的中文字符集。其编码范围是高位0xa1-0xfe,低位也是0xa1-0xfe;汉字从0xb0a1开始,结束于0xf7fe。 GB2312将代码表分为94个区,对应第一字节(0xa1-0xfe);每个区94个位(0xa1-0xfe),对应第二字节,两个字节的值分别为区号值和位号值加32(2OH),因此也称为区位码。01-09区为符号、数字区,16-87区为汉字区(0xb0-0xf7),10-15区、88-94区是有待进一步标准化的空白区。GB2312将收录的汉字分成两级:第一级是常用汉字计3755个,置于16-55区,按汉语拼音字母/笔形顺序排列;第二级汉字是次常用汉字计3008个,置于56-87区,按部首/笔画顺序排列。故而GB2312最多能表示6763个汉字。

GB2312的编码范围为2121H-777EH,与ASCII有重叠,通行方法是将GB码两个字节的最高位置1以示区别。

attachment:GB2312-80.png

图1:GB2312编码图

图中位于ASCII区中的虚线区域即为原GB2312编码区域,右下角实线区域为平移后的GB2312编码区域。其中详细区位分布如下所示:

区号    字数    字符类别

01      94    一般符号
02      72    顺序号码
03      94    拉丁字母
04      83    日文假名
05      86    Katakana
06      48    希腊字母
07      66    俄文字母
08      63    汉语拼音符号
09      76    图形符号
10-15            备用区
16-55    3755    一级汉字,以拼音为序
56-87    3008    二级汉字,以笔划为序
88-94            备用区

GBK 和 GB18030 编码

由于BG2312表示的汉字比较有限,因此一些偏僻汉字在GB2312中无法表示。随着计算机应用的普及,这个问题日益突出,我国的信息标准化委员会就对标准进行了扩充,得到了扩充后的汉字编码方案GBK。它一方面向上兼容GB2312,另一方面将常用的繁体字填充到原编码标准中留下的空白码段中,使汉字数增加到20902个。值得注意的是GBK并不是一个国家标准,而只是一个规范,随着GB18030国家标准的发布,它将完成它的历史使命。GB18030采用变长编码,其中两字节部分与GBK完全兼容,共收录27484个汉字,总的编码数超过150万个码位。

Unicode 编码

随着互联网的迅速发展,进行数据交换的需求越来越大,不同的编码体系越来越成为信息交换的障碍,而且多种语言共存的文档不断增多,单靠ANSI代码页已很难解决这些问题,于是 Unicode 应运而生。

Unicode 采用两个字节编码体系,因此它允许表示65536个字符,这已能满足目前大多数场合的需要。前128个Unicode字符是标准的ASCII字符,接下来的128个扩展的ASCII字符,其余的字符供不同语言的文字和符号使用。其版本V3.0于2000年公布,内容包括字母和符号10236个、汉字27786个、韩文拼音11172个、造字区6400个、保留20249个,控制符65个。

UNICODE同现在流行的代码页最显著不同点在于:UNICODE是两字节的全编码,对于ASCII字符它也使用两字节表示。代码页是通过高字节的取值范围来确定是ASCII字符,还是汉字的高字节。如果发生数据损坏,某处内容破坏,则会引起其后汉字的混乱。UNICODE则一律使用两个字节表示一个字符,最明显的好处是它简化了汉字的处理过程。

UNICODE有双重含义,首先UNICODE是对国际标准ISO/IEC10646编码的一种称谓(ISO/IEC10646是一个国际标准,亦称大字符集,它是ISO于1993年颁布的一项重要国际标准,其宗旨是全球所有文种统一编码),另外它又是由美国的HP、Microsoft、IBM、Apple等大企业组成的联盟集团的名称,成立该集团的宗旨就是要推进多文种的统一编码。

UNICODE使用平面来描述编码空间,每个平面分为256行,256列,相对于两字节编码的高低两个字节。

UNICODE的第一个平面,称为BasicMultilingualPlane(基本多文种平面),简称BMP,由于BMP仅用两个字节表示,所以倍受青睐。

attachment:Unicode.png

图2:Unicode编码图