汉字编码问题
一、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-0
9区为符号、数字区,16-87区为汉字区(0xb0-0xf7),10-15区、88-94区是有待进一步标准化的空白区。GB2312将收录的汉字分成两级:第一级是常用汉字计3755个,置于16-55区,按汉语拼音字母/笔形顺序排列;第二级汉字是次常用汉字计3008个,置于56-87区,按部首/笔画顺序排列。故而GB2312最多能表示6763个汉字。
GB2312的编码范围为2121H-777EH,与ASCII有重叠,通行方法是将GB码两个字节的最高位置1以示区别。
图1:GB2312编码图
图中位于ASCII区中的虚线区域即为原GB2312编码区域,右下角实线区域为平移后的GB2312编码区域。
二、GB2312-80的扩展
GBK是GB2312-80的扩展,是向上兼容的。它包含了20902个汉字,其编码范围是0x8140-0xfefe,剔除高位0x80的字位。其所有字符都可以一对一映射到Unicode2.0。
GB18030-2000(GBK2K)在GBK的基础上进一步扩展了汉字,增加了藏、蒙等少数民族的字形。GBK2K从根本上解决了字位不够,字形不足的问题。它有几个特点:
● 它并没有确定所有的字形,只是规定了编码范围,留待以后扩充。
● 编码是变长的,其二字节部分与GBK兼容;四字节部分是扩充的字形、字位,其编码范围是首字节0x81-0xfe、二字节0x30-0x39、三字节0x81-0xfe、四字节0x30-0x39。
● 它的推广是分阶段的,首先要求实现的是能够完全映射到Unicode3.0标准的所有字形。
● 它是国家标准,是强制性的。
● 现在还没有任何一个操作系统或软件实现了GBK2K的支持,这是现阶段和将来的工作内容。
三、Unicode编码
国际标准组织于1984年4月成立ISO/IECJTC1/SC2/WG2工作组,针对各国文字、符号进行统一性编码。1991年美国跨国公司成立UnicodeConsortium,并于1991年10月与WG2达成协议,采用同一编码字集。目前Unicode是采用16位编码体系,其字符集内容与ISO10646的BMP(BasicMultilingualPlane)相同。Unicode于1992年6月通过DIS(DrafInternationalStandard),目前版本V2.0于1996公布,内容包含符号6811个,汉字20902个,韩文拼音11172个,造字区6400个,保留20249个,共计65534个。
随着国际互联网的迅速发展,要求进行数据交换的需求越来越大,不同的编码体系越来越成为信息交换的障碍,而且多种语言共存的文档不断增多,单靠代码页已很难解决这些问题,于是UNICODE应运而生。
UNICODE有双重含义,首先UNICODE是对国际标准ISO/IEC10646编码的一种称谓(ISO/I
EC10646是一个国际标准,亦称大字符集,它是ISO于1993年颁布的一项重要国际标准,其宗旨是全球所有文种统一编码),另外它又是由美国的HP、Microsoft、IBM、Apple等大企业组成的联盟集团的名称,成立该集团的宗旨就是要推进多文种的统一编码。
UNICODE同现在流行的代码页最显著不同点在于:UNICODE是两字节的全编码,对于ASCII字符它也使用两字节表示。代码页是通过高字节的取值范围来确定是ASCII字符,还是汉字的高字节。如果发生数据损坏,某处内容破坏,则会引起其后汉字的混乱。UNICODE则一律使用两个字节表示一个字符,最明显的好处是它简化了汉字的处理过程。
UNICODE使用平面来描述编码空间,每个平面分为256行,256列,相对于两字节编码的高低两个字节。
UNICODE的第一个平面,称为BasicMultilingualPlane(基本多文种平面),简称BMP,由于BMP仅用两个字节表示,所以倍受青睐。
图2:BMP的最新概貌图
其中A_ZONE为拼音文字编码区,拉丁文、阿拉伯文、日文的平假名及片假名等都在此区编码。CJKExtensionA和CJK为汉字区域共计27487个汉字。Y1即彝文,位于O-ZONE保留待将来使用。Hangul即韩文。EUDC为用户私有区,用户可以根据需要自己定义此区的编码。R-ZONE为限制使用区,一些兼容字符、特殊字符均放在此区。
UNICODE定义BMP中的D800-DFFF为代理区(SurrogateZone),其中D800-D8FF为高半代理(highsurrogate),DC00-DFFF为低半代理(lowsurrogate)。从两个区域分别取一个编码,组成一个4字节的代理对来表示一个编码字符,此即为UTF-16。利用UTF-16机制,UNICODE扩充了1024*1024个字符,相应于OO-OF平面,并且将02平面分配给了CJKExtensionB。Microsoft在Windows2000已实现了UTF-16。
Unicode编码布局
四、大五码(Big5)
如不去考虑特殊符号,及后来的七个扩充字,TW-BIG5 的排序方式如下。将所有的字分成
两大:常用字区与次常用字区,每一个字区分别用笔画来排序,同一个笔画的字,依部首来排。TW-BIG5 每个字由两个字节组成,其第一字节编码范围为0xA1~0xF9,第二字节编码范围为0x40~0x7E与0xA1~0xFE,总计收入13868个字 (包括5401个常用字、7652 个次常用字、7个扩充字、以及808个各式符号),其中可以大致划分为以下几个字区:
第一字节 | 第二字节 | 字区 | 制定 |
A1..A2 | 40..7E, A1..FE | 各种符号区 | 1984 |
A3 | 40..7E, A1..BF | 各种符号区 (包括标点符号、ASCII 全角符号、注音符号等) | 1984 |
A3 | E1 | 欧元符号 | CP950 |
A4..C5 | 40..7E, A1..FE | 常用字区 | 1984 |
C6 | 40..7E | 常用字区 | 1984 |
C6 | A1..FE | 罕用符号区 | 倚天 |
C7 | 40..7E, A1..FE | 罕用符号区 (包括日文、俄文等) | 倚天 |
C8 | 40..7E, A1..D3 | 罕用符号区 (包括俄文、输入法特殊符号等) | 倚天 |
C9..F8 | 40..7E, A1..FE | 次常用字区 | 1984 |
F9 | 40..7E, A1..D5 | 次常用字区 | 1984 |
F9 | D6..DC | 七个扩充字 | 倚天 |
F9 | DD..FE | 表格符号区 | 倚天 |
Table 1. BIG5字区与编码范围
扩充字 | BIG5 码 | Unicode 码 | BIG5_1984 的同义字 |
碁 | 0xF9D6 | 0x88CF | 棋 |
锈 | 0xF9D7 | 0x92B9 | 锈 |
里 | 0xF9D8 | 0x7CA7 | 里 |
墙 | 0xF9D9 | 0x58BB | 墙 |
恒 | 0xF9DA | 0x6052 | 恒 |
妆 | unicode所有字符0xF9DB | 0x7881 | 妆 |
娴 | 0xF9DC | 0x5AFA | 娴 |
Table 2. 七个扩充字
编码 | 第一个字节 | 第二个字节 | 第三个字节 | 第四个字节 |
GB2312 | 0xB0 - 0xF7 | 0xA0 - 0xFE | ||
GBK | 0x81 - 0xFE | 0x40 - 0xFE | ||
GB18030 的双字节 | 0x81 - 0xFE | 0x40 - 0x7E, 0x80 - 0xFE | ||
GB18030 的四字节 | 0x81 - 0xFE | 0x30 - 0x39 | 0x81 - 0xFE | 0x30 - 0x39 |
Table 3. GB 的汉字编码规则
五、如何判断一个汉字是big5或是gb
大陆电脑中的汉字多以GB2312标准进行编码,简称GB码或国标码,共定义6763汉字,编码如下:
第一字节,行码0xA1-0xFE,第二节字,列码0xA1-0xFE,每行94个汉字。其中,1-15行(A1-AF)全角字母、符号;16-55行(B0-CF)以拼音为序的一级汉字3755字;56-87行(D0-F7)以部首为序的二级汉字3008字。例如:GB码16行1列表示“啊”字,编码为0xB0A1。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论