Google
 

Unicode、GB2312、GBK和GB18030中的汉字

GB18030有两个版本:GB18030-2000和GB18030-2005。GB18030-2000是GBK的取代版本,它的主要特点是在GBK基础上增加了CJK统一汉字扩充A的汉字。GB18030-2005的主要特点是在GB18030-2000基础上增加了CJK统一汉字扩充B的汉字。本文数一数GB18030中的汉字,也顺便看看其它标准中的汉字。

1 Unicode中的汉字

在Unicode 5.0的99089个字符中,有71226个字符与汉字有关。它们的分布如下:

Block名称开始码位结束码位字符数
CJK统一汉字4E009FBB20924
CJK统一汉字扩充A34004DB56582
CJK统一汉字扩充B200002A6D642711
CJK兼容汉字F900FA2D302
CJK兼容汉字FA30FA6A59
CJK兼容汉字FA70FAD9106
CJK兼容汉字补充2F8002FA1D542

如果不算兼容汉字,Unicode目前支持的汉字总数是20924+6582+42711=70217。

这里有一个细节。在早期的Unicode版本中,CJK统一汉字区的范围是0x4E00-0x9FA5,也就是我们经常提到的20902个汉字。当前版本的Unicode增加了22个字符,码位是0x9FA6-0x9FBB。它们是:

那么GB18030是否支持这22个字符?后面还会讨论。

2 GB2312

1980年的GB2312一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。

这6763个汉字在Unicode中不是连续的,分布在CJK统一汉字字符区(0x4E00-0x9FA5)的20902个汉字中。

3 GBK

1995年的汉字扩展规范GBK1.0收录了21886个符号,包括21003个汉字和883个其它符号。

这21003汉字包括CJK统一汉字区的20902个汉字。余下的101个汉字包括:

4 GB18030-2000

4.1 字汇

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 中的全部字符。

4.2 汉字

如下表所示,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个汉字。

5 GB18030-2005

5.1 字汇

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)。

5.2 汉字

如下表所示,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。

6 结束语

GB2312有6763个汉字,GBK有21003个汉字,GB18030-2000有27533个汉字,GB18030-2005有70244个汉字。

Unicode 5.0中,如果不算兼容区,目前有70217个汉字。让我们比较一下Unicode的70217汉字和GB18030-2005中的70244汉字:

GB18030-2005Unicode 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没有列出这些字符。

附录1 GBK增补的80个汉字和部首

GBK增补的80个字符本来是放在PUA区的,后来又被Unicode收录。所以既可以用PUA区的编码表示,也可以用非PUA编码表示。正文中的表格可能不便复制,这里补充一张表格:

汉字GBK编码PUA编码非PUA编码
FE50E8152E81
FE51E81620087
FE52E81720089
FE53E818200CC
FE54E8192E84
FE55E81A3473
FE56E81B3447
FE57E81C2E88
FE58E81D2E8B
FE59E81E9FB4
FE5AE81F359E
FE5BE820361A
FE5CE821360E
FE5DE8222E8C
FE5EE8232E97
FE5FE824396E
FE60E8253918
FE61E8269FB5
FE62E82739CF
FE63E82839DF
FE64E8293A73
FE65E82A39D0
FE66E82B9FB6
FE67E82C9FB7
FE68E82D3B4E
FE69E82E3C6E
FE6AE82F3CE0
FE6BE8302EA7
FE6CE831215D7
FE6DE8329FB8
FE6EE8332EAA
FE6FE8344056
FE70E835415F
FE71E8362EAE
FE72E8374337
FE73E8382EB3
FE74E8392EB6
FE75E83A2EB7
FE76E83B2298F
FE77E83C43B1
FE78E83D43AC
FE79E83E2EBB
FE7AE83F43DD
FE7BE84044D6
FE7CE8414661
FE7DE842464C
FE7EE8439FB9
FE80E8444723
FE81E8454729
FE82E846477C
FE83E847478D
FE84E8482ECA
FE85E8494947
FE86E84A497A
FE87E84B497D
FE88E84C4982
FE89E84D4983
FE8AE84E4985
FE8BE84F4986
FE8CE850499F
FE8DE851499B
FE8EE85249B7
FE8FE85349B6
FE90E8549FBA
FE91E855241FE
FE92E8564CA3
FE93E8574C9F
FE94E8584CA0
FE95E8594CA1
FE96E85A4C77
FE97E85B4CA2
FE98E85C4D13
FE99E85D4D14
FE9AE85E4D15
FE9BE85F4D16
FE9CE8604D17
FE9DE8614D18
FE9EE8624D19
FE9FE8634DAE
FEA0E8649FBB

 

Google
 

个人主页留言本我的空间我的程序 fmdd@263.net