GB18030有两个版本:GB18030-2000和GB18030-2005。GB18030-2000是GBK的取代版本,它的主要特点是在GBK基础上增加了CJK统一汉字扩充A的汉字。GB18030-2005的主要特点是在GB18030-2000基础上增加了CJK统一汉字扩充B的汉字。本文数一数GB18030中的汉字,也顺便看看其它标准中的汉字。
在Unicode 5.0的99089个字符中,有71226个字符与汉字有关。它们的分布如下:
Block名称 | 开始码位 | 结束码位 | 字符数 | |
CJK统一汉字 | 4E00 | 9FBB | 20924 | |
CJK统一汉字扩充A | 3400 | 4DB5 | 6582 | |
CJK统一汉字扩充B | 20000 | 2A6D6 | 42711 | |
CJK兼容汉字 | F900 | FA2D | 302 | |
CJK兼容汉字 | FA30 | FA6A | 59 | |
CJK兼容汉字 | FA70 | FAD9 | 106 | |
CJK兼容汉字补充 | 2F800 | 2FA1D | 542 |
如果不算兼容汉字,Unicode目前支持的汉字总数是20924+6582+42711=70217。
这里有一个细节。在早期的Unicode版本中,CJK统一汉字区的范围是0x4E00-0x9FA5,也就是我们经常提到的20902个汉字。当前版本的Unicode增加了22个字符,码位是0x9FA6-0x9FBB。它们是:
那么GB18030是否支持这22个字符?后面还会讨论。
1980年的GB2312一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。
这6763个汉字在Unicode中不是连续的,分布在CJK统一汉字字符区(0x4E00-0x9FA5)的20902个汉字中。
1995年的汉字扩展规范GBK1.0收录了21886个符号,包括21003个汉字和883个其它符号。
这21003汉字包括CJK统一汉字区的20902个汉字。余下的101个汉字包括:
在制定GBK时,Unicode中还没有这些字符,所以使用了专用区的码位,这80个字符的码位是0xE815-0xE864。后来,Unicode将52个汉字收录到“CJK统一汉字扩充A”。28个部首中有14个部首被收录到“CJK部首补充区”。所以在上图中,这些字符都有两个Unicode编码。
上图中淡黄色背景的8个部首被收录到“CJK统一汉字区”的新增区域,即前面提到的0x9FA6-0x9FBB。还有6个淡灰色背景的部首被Unicode收录到“CJK统一汉字扩充B”(网友slt指正)。
请注意,淡黄色和淡灰色的14个字符按照GB18030还是应该映射到PUA码位。这14个字符与非PUA码位的映射关系只是网友找出来的,不是标准规定的。如果按照GBK编码,这80个字符应该全部映射到PUA码位。GB18030将其中66个字符映射到了非PUA码位。不过在Windows中,简体中文区域的默认代码页还是GBK,不是GB18030。
汉字 | GBK编码 | Unicode编码 |
郎 | FD9C | F92C |
凉 | FD9D | F979 |
秊 | FD9E | F995 |
裏 | FD9F | F9E7 |
隣 | FDA0 | F9F1 |
兀 | FE40 | FA0C |
嗀 | FE41 | FA0D |
﨎 | FE42 | FA0E |
﨏 | FE43 | FA0F |
﨑 | FE44 | FA11 |
﨓 | FE45 | FA13 |
﨔 | FE46 | FA14 |
礼 | FE47 | FA18 |
﨟 | FE48 | FA1F |
蘒 | FE49 | FA20 |
﨡 | FE4A | FA21 |
﨣 | FE4B | FA23 |
﨤 | FE4C | FA24 |
﨧 | FE4D | FA27 |
﨨 | FE4E | FA28 |
﨩 | FE4F | FA29 |
GB18030-2000的字汇部分是这样写的:
本标准收录的字符分别以单字节、双字节和四字节编码。
5.1 单字节部分
本标准中,单字节的部分收录了GB 11383的0x00到0x7F全部128个字符及单字节编码的欧元符号。
5.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个。
双字节编码的欧元符号。
5.3 四字节部分
本标准的四字节的部分,收录了上述双字节字符之外的,包括CJK统一汉字扩充A在内的GB 13000.1 中的全部字符。
如下表所示,GB18030-2000收录了27533个汉字:
类别 | 码位范围 | 码位数 | 字符数 | 字符类型 |
双字节部分 | 第一字节 0xB0-0xF7 第二字节 0xA1-0xFE |
6768 | 6763 | 汉字 |
第一字节0x81-0xA0 第二字节0x40-0xFE |
6080 | 6080 | 汉字 | |
第一字节0xAA-0xFE 第二字节0x40-0xA0 |
8160 | 8160 | 汉字 | |
四字节部分 | 第一字节0x81-0x82 第二字节0x30-0x39 第三字节0x81-0xFE 第四字节0x30-0x39 |
6530 | 6530 | CJK统一汉字扩充A |
27533就是6763+6080+8160+6530。双字节部分的6763+6080+8160=21003个汉字就是GBK的21003个汉字。
在Unicode中,CJK统一汉字扩充A有6582个汉字,为什么这里只有6530个汉字?
这是因为在GBK时代,双字节部分已经收录过CJK统一汉字扩充A的52个汉字,所以还余6530个汉字。
GB18030-2005的字汇部分是这样写的:
本标准收录的字符分别以单字节、双字节或四字节编码。
5.1 单字节部分
本标准中,单字节的部分收录了GB/T 11383-1989的0x00到0x7F全部128个字符。
5.2 双字节部分
本标准中,双字节的部分收录内容如下:
GB 13000.1-1993的全部CJK统一汉字字符。见附录A。
GB 13000.1-1993的CJK兼容区挑选出来的21个汉字。见附录A。
GB 13000.1-1993中收录而GB 2312未收录的我国台湾地区使用的图形字符139个。见附录A。
GB 13000.1-1993收录的其它字符31个。见附录A。
GB 2312中的非汉字符号。见附录A。
GB 12345 的竖排标点符号19个。见附录A。
GB 2312未收录的10个小写罗马数字。见附录A。
GB 2312未收录的带音调的汉语拼音字母5个以及ɑ 和ɡ 。见附录A。
汉字数字“〇”。 见附录A。
表意文字描述符13个。见附录A和附录B。
对GB 13000.1-1993增补的汉字和部首/构件80个。见附录A和附录C。
双字节编码的欧元符号。见附录A。
5.3 四字节部分
本标准的四字节的部分,收录了上述双字节字符之外的,GB 13000的CJK统一汉字扩充A、CJK统一汉字扩充B和已经在GB13000中编码的我国少数民族文字的字符。见附录D。
GB18030-2005最主要的变化是增加了CJK统一汉字扩充B。它还去掉了单字节编码的欧元符号(0x80)。
如下表所示,GB18030-2005收录了70244个汉字:
类别 | 码位范围 | 码位数 | 字符数 | 字符类型 |
双字节部分 | 第一字节 0xB0-0xF7 第二字节 0xA1-0xFE |
6768 | 6763 | 汉字 |
第一字节0x81-0xA0 第二字节0x40-0xFE |
6080 | 6080 | 汉字 | |
第一字节0xAA-0xFE 第二字节0x40-0xA0 |
8160 | 8160 | 汉字 | |
四字节部分 | 第一字节0x81-0x82 第二字节0x30-0x39 第三字节0x81-0xFE 第四字节0x30-0x39 |
6530 | 6530 | CJK统一汉字扩充A |
第一字节0x95-0x98 第二字节0x30-0x39 第三字节0x81-0xFE 第四字节0x30-0x39 |
42711 | 42711 | CJK统一汉字扩充B |
70244就是6763+6080+8160+6530+42711。
GB2312有6763个汉字,GBK有21003个汉字,GB18030-2000有27533个汉字,GB18030-2005有70244个汉字。
Unicode 5.0中,如果不算兼容区,目前有70217个汉字。让我们比较一下Unicode的70217汉字和GB18030-2005中的70244汉字:
GB18030-2005 | Unicode 5.0 | 对应的Unicode编码 |
CJK统一汉字的20902汉字 | CJK统一汉字的20902汉字 | 0x4E00-0x9FA5 |
CJK统一汉字扩充A的6582汉字 | CJK统一汉字扩充A的6582汉字 | 0x3400-0x4DB5 |
CJK统一汉字扩充B的42711汉字 | CJK统一汉字扩充B的42711汉字 | 0x20000-0x2A6D6 |
CJK部首补充区的14个部首 | 未计入 | 2E81, 2E84, 2E88, 2E8B, 2E8C, 2E97, 2EA7, 2EAA, 2EAE, 2EB3, 2EB6, 2EB7, 2EBB, 2ECA |
CJK兼容汉字区的21个汉字 | 未计入 | F92C, F979, F995, F9E7, F9F1, FA0C, FA0D, FA0E, FA0F, FA11, FA13, FA14, FA18, FA1F, FA20, FA21, FA23, FA24, FA27, FA28, FA29 |
“”8个部首 | CJK统一汉字区新增了这8个字符 | 0x9FB4-0x9FBB |
未计入 | CJK统一汉字区新增的14个字符 | 0x9FA6-0x9FB3 |
CJK统一汉字区新增的0x9FA6-0x9FB3这14个字符在GB18030中有对应的码位(0x82358F33-0x82358F39, 0x82359030-0x82359039, 0x82359130-0x82359134),不过GB18030没有列出这些字符。
GBK增补的80个字符本来是放在PUA区的,后来又被Unicode收录。所以既可以用PUA区的编码表示,也可以用非PUA编码表示。正文中的表格可能不便复制,这里补充一张表格:
汉字 | GBK编码 | PUA编码 | 非PUA编码 |
| FE50 | E815 | 2E81 |
| FE51 | E816 | 20087 |
| FE52 | E817 | 20089 |
| FE53 | E818 | 200CC |
| FE54 | E819 | 2E84 |
| FE55 | E81A | 3473 |
| FE56 | E81B | 3447 |
| FE57 | E81C | 2E88 |
| FE58 | E81D | 2E8B |
| FE59 | E81E | 9FB4 |
| FE5A | E81F | 359E |
| FE5B | E820 | 361A |
| FE5C | E821 | 360E |
| FE5D | E822 | 2E8C |
| FE5E | E823 | 2E97 |
| FE5F | E824 | 396E |
| FE60 | E825 | 3918 |
| FE61 | E826 | 9FB5 |
| FE62 | E827 | 39CF |
| FE63 | E828 | 39DF |
| FE64 | E829 | 3A73 |
| FE65 | E82A | 39D0 |
| FE66 | E82B | 9FB6 |
| FE67 | E82C | 9FB7 |
| FE68 | E82D | 3B4E |
| FE69 | E82E | 3C6E |
| FE6A | E82F | 3CE0 |
| FE6B | E830 | 2EA7 |
| FE6C | E831 | 215D7 |
| FE6D | E832 | 9FB8 |
| FE6E | E833 | 2EAA |
| FE6F | E834 | 4056 |
| FE70 | E835 | 415F |
| FE71 | E836 | 2EAE |
| FE72 | E837 | 4337 |
| FE73 | E838 | 2EB3 |
| FE74 | E839 | 2EB6 |
| FE75 | E83A | 2EB7 |
| FE76 | E83B | 2298F |
| FE77 | E83C | 43B1 |
| FE78 | E83D | 43AC |
| FE79 | E83E | 2EBB |
| FE7A | E83F | 43DD |
| FE7B | E840 | 44D6 |
| FE7C | E841 | 4661 |
| FE7D | E842 | 464C |
| FE7E | E843 | 9FB9 |
| FE80 | E844 | 4723 |
| FE81 | E845 | 4729 |
| FE82 | E846 | 477C |
| FE83 | E847 | 478D |
| FE84 | E848 | 2ECA |
| FE85 | E849 | 4947 |
| FE86 | E84A | 497A |
| FE87 | E84B | 497D |
| FE88 | E84C | 4982 |
| FE89 | E84D | 4983 |
| FE8A | E84E | 4985 |
| FE8B | E84F | 4986 |
| FE8C | E850 | 499F |
| FE8D | E851 | 499B |
| FE8E | E852 | 49B7 |
| FE8F | E853 | 49B6 |
| FE90 | E854 | 9FBA |
| FE91 | E855 | 241FE |
| FE92 | E856 | 4CA3 |
| FE93 | E857 | 4C9F |
| FE94 | E858 | 4CA0 |
| FE95 | E859 | 4CA1 |
| FE96 | E85A | 4C77 |
| FE97 | E85B | 4CA2 |
| FE98 | E85C | 4D13 |
| FE99 | E85D | 4D14 |
| FE9A | E85E | 4D15 |
| FE9B | E85F | 4D16 |
| FE9C | E860 | 4D17 |
| FE9D | E861 | 4D18 |
| FE9E | E862 | 4D19 |
| FE9F | E863 | 4DAE |
| FEA0 | E864 | 9FBB |