GB 18030,全称《信息技术 中文编码字符集》,是中华人民共和国国家标准所规定的变长多字节字符集。其对GB 2312-1980完全向后兼容,与GBK基本向后兼容,并支持Unicode(GB 13000)的所有码位。GB 18030共收录汉字70,244个。

GB 18030的特点GB 18030主要有以下特点1:

采用变长多字节编码,每个字可以由1个、2个或4个字节组成。

编码空间庞大,最多可定义161万个字符。

完全支持Unicode,无需动用造字区即可支持中国国内少数民族文字、中日韩和繁体汉字以及emoji等字符。

GB 18030在微软视窗系统中的代码页为54936。

概念简介国家标准GB18030-2000《信息交换用汉字编码字符集基本集的补充》是我国继GB2312-1980和GB13000-1993之后最重要的汉字编码标准,是我国计算机系统必须遵循的基础性标准之一。

GB18030-2000编码标准是由信息产业部和国家质量技术监督局在2000年 3月17日联合发布的,并且将作为一项国家标准在2001年的1月正式强制执行。

GB18030-2005《信息技术中文编码字符集》是我国制订的以汉字为主并包含多种我国少数民族文字(如藏、蒙古、傣、彝、朝鲜、维吾尔文等)的超大型中文编码字符集强制性标准,其中收入汉字70000余个。2

标准要求GB 18030 的当前版本为 GB 18030-2005。现行版本为国家质量监督检验总局和中国国家标准化管理委员会于2005年11月8日发布,2006年5月1日实施;是在GB18030-2000基础上增加了CJK统一汉字扩充B的汉字。 本规格的初版“GB 18030-2000《信息技术 信息交换用汉字编码字符集 基本集的扩充》”是由中华人民共和国信息产业部电子工业标准化研究所起草,由国家质量技术监督局于2000年3月17日发布。在GBK基础上增加了CJK统一汉字扩充A的汉字。

此标准内的单字节编码部分、双字节编码部分,和四字节编码部分收录的少数中日韩统一表意文字扩展A区汉字,为强制性标准。其他部分则属于规模性标准。在中华人民共和国境内所有软件产品,都需要支持这个同时包含单字节、双字节和四字节编码的规格。

Unicode支持GB 18030在其标准中以码表形式定义了除去代理对外的全部Unicode码位的定义,因此算得上是一种Unicode的变换格式(UTF)。由于GB 18030基本上是绕开已分配的码点去指定需要对应的Unicode,其变换和UTF-8相比要复杂得多。在日常实现上,常常会直接使用一个偏移量表3。

GB 18030—2005与GB18030—2000、GBK相比,去除了很多原来映射在PUA中的编码。后来剩余的24个PUA码位也在Unicode 4.1中加上,如下所示。

|| || 国标码码表中私有区码位的演变

字节结构B 18030包含三种长度的编码:单字节的ASCII、双字节的GBK(略带扩展)、以及用于填补所有Unicode码位的四字节UTF区块。GBK双字节部分通过查表定义,而四字节部分则根据之前两个部分没有提到的通用字符集码位顺序填补。由于和GBK兼容,GB 18030在搜索ASCII字符时也需要使用特别代码进行判断。

|| || GB 18030编码

一、二字节区块基本就是GBK编码,另外加上了专门的欧元字符、竖排版本的标点符号,以及造字区对Unicode造字区的对应。四字节区块可以视作两段形似GBK二字节区块结构的部分,每段的第一字节可以为0x81到0xFE,第二字节为0x30到0x39。由于结构类似,能够安全于GBK的字符串搜索程序对于GB 18030来说也基本安全(正如基于字节的搜索程序对于EUC、UTF-8也基本安全一般。)

四字节区块总共可以表达1,587,600(126×10×126×10)种字符,足以覆盖Unicode的1,112,064(17×65536 − 2048个代理对)个有效码位。

由于四字节区块通过填空定义,要写出处理这段转换的程序需要同时知道GBK的覆盖范围,并不简单:

U+00DE (Þ) → 81 30 89 37U+00DF (ß) → 81 30 89 38U+00E0 (à) → A8 A4U+00E1 (á) → A8 A2U+00E2 (â) → 81 30 89 39U+00E3 (ã) → 81 30 8A 30WHATWG和W3C的GB 18030实现通过一张“位置偏移表”记录GB 18030四字节区中连续的几块碎片,以便高效处理转换。ICU和glibc也都对大块连续的区域使用了类似的策略。

版本GB 18030-2000,兼容Unicode 3.0中日韩统一表意文字(即扩展A区),共收27,533个汉字;2000年3月17日发布、2000年7月1日实施。

GB 18030-2005,更新至Unicode 3.1中日韩统一表意文字(即扩展B区),并刊载少数民族包括朝鲜文、蒙古文(包括满文、托忒文、锡伯文、阿礼嘎礼文)、德宏傣文、藏文、维吾尔文/哈萨克文/柯尔克兹文和彝文的文字。共有70,244个汉字;2005年11月8日发布、2006年5月1日实施。

版本区别GB18030最新版本是GB18030-2005。GB18030-2005与GB18030-2000的编码体系结构是完全相同的。那么,GB18030的2000版和2005版有什么区别和联系呢?

2000年发布的GB18030-2000,全名是《信息技术 汉字编码字符集 基本集的扩充》。GB18030-2000仅规定了常用非汉字符号和27533个汉字(包括部首、部件等)的编码。

GB18030-2000是全文强制性标准,市场上销售的产品必须符合。2005年发布的GB18030-2005在GB18030-2000的基础上增加了42711个汉字和多种我国少数民族文字的编码,增加的这些内容是推荐性的。原GB18030-2000中的内容是强制性的,市场上销售的产品必须符合。故GB18030-2005为部分强制性标准,自发布之日起代替GB18030-2000。4GB18030-2005的单字节编码部分、双字节编码部分和四字节编码部分的CJK统一汉字扩充A(即0x8139EE39—0x82358738)部分为强制性。

适用范围GB 18030标准第1条规定:“本标准适用于图形字符信息的处理、交换、存储、传输、显现、输入和输出。”简单地说,GB18030可用于一切处理中文(包括汉字和少数民族文)信息,特别是汉字信息的信息处理产品。GB18030-2005标准可应用于中文处理的软件类产品,如操作系统、数据库、中间件、办公软件、财务软件、CAD软件、表处理软件、教育软件、字型字库等。GB18030-2005标准还可应用于具有处理汉字功能的硬件产品,如打印机、移动电话、PDA产品等。5

达到要求问:产品达到哪些要求才算符合GB 18030?

答:同时达到以下两个要求的产品,为符合GB 18030-2005强制部分的产品:

(1)产品可以正确输入、输出、处理GB 18030-2005强制部分规定的全部汉字字符;

(2)产品可以正确识别GB 18030-2005强制性部分规定的全部汉字字符对应的编码。

总体结构标准采用单字节、双字节和四字节三种方式对字符编码。单字节部分采用GB/T 11383的编码结构与规则,使用0×00至0×7F码位(对应于ASCII码的相应码位)。双字节部分,首字节码位从0×81至0×FE,尾字节码位分别是0×40至0×7E和0×80至0×FE。四字节部分采用GB/T 11383未采用的0×30到0×39作为对双字节编码扩充的后缀,这样扩充的四字节编码,其范围为0×81308130到0×FE39FE39。其中第一、三个字节编码码位均为0×81至0×FE,第二、四个字节编码码位均为0×30至0×39。码位总体结构见右图。5

字汇GB18030-2000字汇

GB18030-2000的字汇部分是这样写的:

本标准收录的字符分别以单字节、双字节和四字节编码。

1、单字节部分

本标准中,单字节的部分收录了GB 11383的0x00到0x7F全部128个字符及单字节编码的欧元符号。

2、双字节部分

本标准中,双字节的部分收录内容如下:

GB 13000.1的全部CJK统一汉字字符。

GB 13000.1的CJK兼容区挑选出来的21个汉字。

GB 13000.1中收录而GB 2312未收录的我国台湾地区使用的图形字符139个。

GB 13000.1收录的其它字符31个。

GB 2312中的非汉字符号。

GB 12345 的竖排标点符号19个。

GB 2312未收录的10个小写罗马数字。

GB 2312未收录的带音调的汉语拼音字母5个以及ɑ 和ɡ 。

汉字数字“〇”。

表意文字描述符13个。

增补汉字和部首/构件80个。

双字节编码的欧元符号。

3 、四字节部分

本标准的四字节的部分,收录了上述双字节字符之外的,包括CJK统一汉字扩充A在内的GB 13000.1 中的全部字符。6

GB18030-2005字汇

GB18030-2005的字汇部分是这样写的:

本标准收录的字符分别以单字节、双字节或四字节编码。

1、单字节部分

本标准中,单字节的部分收录了GB/T 11383-1989的0x00到0x7F全部128个字符。

2、双字节部分

本标准中,双字节的部分收录内容如下:

GB 13000.1-1993的全部CJK统一汉字字符。

GB 13000.1-1993的CJK兼容区挑选出来的21个汉字。

GB 13000.1-1993中收录而GB 2312未收录的我国台湾地区使用的图形字符139个。

GB 13000.1-1993收录的其它字符31个。

GB 2312中的非汉字符号。

GB 12345 的竖排标点符号19个。

GB 2312未收录的10个小写罗马数字。

GB 2312未收录的带音调的汉语拼音字母5个以及ɑ 和ɡ 。

汉字数字“〇”。

表意文字描述符13个。

对GB 13000.1-1993增补的汉字和部首/构件80个。

双字节编码的欧元符号。

3、四字节部分

本标准的四字节的部分,收录了上述双字节字符之外的,GB 13000的CJK统一汉字扩充A、CJK统一汉字扩充B和已经在GB13000中编码的我国少数民族文字的字符。

GB18030-2005最主要的变化是增加了CJK统一汉字扩充B。它还去掉了单字节编码的欧元符号0x80)。

GB18030有1611668个码位,在GB18030-2005中定义了76556个字符。随着我国汉字整理和编码研究工作的不断深入,以及国际标准ISO/IEC 10646的不断发展,GB18030所收录的字符将在新版本中增加。7

汉字GB18030-2000汉字

如下表所示,GB18030-2000收录了27533个汉字:

|| ||

27533就是6763+6080+8160+6530。双字节部分的6763+6080+8160=21003个汉字就是GBK的21003个汉字。

在Unicode中,CJK统一汉字扩充A有6582个汉字,为什么这里只有6530个汉字?

这是因为在GBK时代,双字节部分已经收录过CJK统一汉字扩充A的52个汉字,所以还余6530个汉字。8

GB18030-2005汉字

如下表所示,GB18030-2005收录了70244个汉字:

|| ||

70244就是6763+6080+8160+6530+42711。8

版本变化GB18030-2005相对于GB18030-2000主要有以下变化:

1、在四字节字符表中增加CJK统一汉字扩充B和已经在GB13000中编码的我国少数民族文字字符的字形。其实GB18030-2000已经映射了这些码位,但GB18030-2000没有给出这些字符的字形。

2、调整字符?的编码。

3、去掉了单字节编码的欧元符号(0x80)。

(纠正:其实GBK和GB18030-2000都没有单字节编码的欧元符号,微软的CP936才有这个符号并定义在0x80)5

制定标准按国际惯例,GB 18030制定采用的标准如下:

GB 18030-2000收录了27533个汉字,GB 18030-2005收录了70244个汉字。GB18030的总编码空间超过150万个码位,为解决人名、地名用字问题提供了方案,为汉字研究、古籍整理等领域提供了统一的信息平台基础。

我国大部分计算机系统仍然采用GB 2312编码。GB 18030与GB 2312一脉相承,较好地解决了旧系统向新系统的转换问题,并且改造成本较小。从我国信息技术和信息产业发展的角度出发,考虑到解决我国用户的需要及解决现有系统的兼容性和对多种操作系统的支持,采用GB 18030是我国较好的选择,而GB 13000.1更适用于未来国际间的信息交换。考虑到GB 18030和GB 13000的兼容问题,标准起草组编制了GB 18030与GB 13000.1的代码映射表,使得两个编码体系可以自由转换。同时,还开发了GB 18030基本点阵字型库。

世界许多国家和地区从方便本国和民族应用的角度出发,制定了相应的编码标准和内码体系,如日本的JIS X 0208和JIS X 0212,韩国的KS C 5601和KS C 5657等,这是国际上采用的通行惯例。制定GB 18030同样符合国际惯例,它全面兼容GB 2312,在字汇上兼容GB 13000.1,可以充分利用已有资源,保证不同系统间的兼容性,最大限度地共享资源,为我国软件产业留有巨大的发展空间。可以相信,GB 18030的实施将有利于国产软件的发展并形成规模,使我国的中文信息技术再上一个台阶。5

标准历程1980年我国颁布了第一个汉字编码字符集标准,即GB 2312-80《信息交换用汉字编码字符集基本集》。该标准共收了6763个汉字及常用符号,奠定了中文信息处理的基础。

随着国际间的交流与合作的扩大,信息处理应用对字符集提出了多文种、大字量、多用途的要求。1993年国际标准化组织发布了ISO/IEC 10646-1《信息技术通用多八位编码字符集第一部分体系结构与基本多文种平面》。我国等同采用此标准制定了GB 13000.1-1993。该标准采用了全新的多文种编码体系,收录了中、日、韩20902个汉字,是编码体系未来发展方向。由于其新的编码体系与现有多数操作系统和外部设备不兼容,所以它的实现仍需要有一个过程,还不能完全解决我国当前应用的迫切需要。

考虑到GB 13000的完全实现有待时日,以及GB 2312编码体系的延续性和现有资源和系统的有效利用与过渡,我们选择了在GB 2312(GB 2311)的基础上进行扩充,并且在字汇上与GB 13000.1兼容的方案,研制一个新的标准——汉字编码基本集的扩充,进而完善GB 2312,以满足我国邮政、户政、金融、地理信息系统等应用的迫切需要。

此项目业已列入1998年国家标准制定计划。1998年10月,由信息产业部电子四所、北京大学计算机技术研究所、北大方正集团、新天地公司、四通新世纪公司、中科院软件所、长城软件公司、中软总公司、金山软件公司和联想公司的技术人员组成标准起草组。在标准研制过程中,全国信息技术标准化技术委员会多次召集标准起草组和知名公司对标准草案进行充分地研究论证,并且特邀了微软公司、惠普公司、Sun公司和IBM公司等参加,广泛征求意见。标准起草组经过反复斟酌和验证,提出了标准制定原则——与GB 2312信息处理交换码所对应的事实上的内码标准兼容,在字汇上支持GB 13000.1的全部中、日、韩(CJK)统一汉字字符和全部CJK扩充A的字符,并且确定了编码体系和27484个汉字,形成兼容性、扩展性、前瞻性兼备的方案。

信息产业部和原国家质量技术监督局于2000年3月17日联合发布了该标准,即GB 18030-2000《信息技术信息交换用汉字编码字符集基本集的扩充》。该标准作为国家强制性标准自发布之日起实施,过渡期到2001年8月31日止。

期间,全国信标委曾制定和发布《汉字扩展规范GBK 1.0》,并在MS Windows 9x/Me/NT/2000、IBM OS/2的系统中广泛应用。GB18030是国家标准,在技术上是GBK的超集,并与其兼容,因此,GBK将结束其历史使命。5

本词条内容贡献者为:

闫晓东 - 副教授 - 中央民族大学信息工程学院