跳转到内容

GB 18030

本页使用了标题或全文手工转换
维基百科,自由的百科全书
GB 18030
GB 18030 字节分配。“半码"(Half codes)指成对使用的四字节部分。
MIME / IANAGB18030
别名代码页 54936
语言国际,但以中文为主
标准GB 18030-2022, GB 18030-2005, GB 18030-2000
分类Unicode转换格式、扩展ASCII、[a]变长编码、CJK
拓展自EUC-CN, GBK
变换/编码ISO 10646(Unicode)
前用GBK, GB2312

GB 18030(全称《信息技术 中文编码字符集》)是中华人民共和国国家标准简体中文字符集,由中华人民共和国信息产业部提出、信息产业部电子工业标准化研究所归口。其向后兼容并替代GB 2312-1980、GBK和CP936传统编码,并支持Unicode(GB 13000)的所有码位。GB 18030采用变长多字节编码,每个字可以由1个、2个或4个字节组成。其编码空间庞大,最多可定义161万个字元。由于GB 18030完全支持Unicode,无需动用造字区即可支持中日韩统一表意文字、中国国内的少数民族文字以及emoji等字符。GB 18030在微软Windows系统中的代码页为54936。

除编码方法外,GB 18030还包含其他文字和语言以及本标准适用对象的要求。不过,GB 18030不是一个汉字规范,不定义汉字的正式字形;字形由《通用规范汉字表》进行规范。

版本

[编辑]

本标准的第一版 GB 18030-2000《信息技术 信息交换用汉字编码字符集 基本集的扩充》由中华人民共和国信息产业部电子工业标准化研究所、北京大学计算机技术研究所、北大方正集团、北京方正新天地信息网络科技有限责任公司、四通集团公司、中国科学院软件研究所、长城软件公司、四通利方公司、中国软件与技术服务股份有限公司、金山软件公司和联想集团起草,由国家质量技术监督局于2000年3月17日发布和实施,后于2001年3月修订后重新发布[1]。此版本兼容Unicode 3.0的中日韩统一表意文字扩展区A,共收录27,533个汉字。

本标准的第二版 GB 18030-2005《信息技术 中文编码字符集》由国家质量监督检验检疫总局和中国国家标准化管理委员会于2005年11月8日发布,并于2006年5月1日实施。此版本兼容Unicode 3.1的中日韩统一表意文字扩展区B,并刊载少数民族包括朝鲜文、蒙古文(包括满文、托忒文、锡伯文、阿礼嘎礼文)、德宏傣文、藏文、维吾尔文/哈萨克文/柯尔克兹文和彝文的文字。共有70,244个汉字。此标准内的单字节编码部分、双字节编码部分,和四字节编码部分收录的少数中日韩统一表意文字扩展区A的汉字,为强制性标准。其他部分则属于规模性标准。[需要解释]在中华人民共和国境内所有软件产品,都需要支持这个同时包含单字节、双字节和四字节编码的规格。[2]: 4 

本标准的第三版 GB 18030-2022《信息技术 中文编码字符集》由国家市场监督管理总局和中国国家标准化管理委员会于2022年7月19日发布,并于2023年8月1日实施[3]。此版本兼容到Unicode 11为止的中日韩统一表意文字扩展区C、D、E和F,并新增康熙部首,以及滇东北苗文、傈僳文、西双版纳新傣文、西双版纳老傣文、德宏傣文等少数民族文字以及蒙古文 BIRGA 符号,共收录汉字87,887个和汉字部首228个,比上一版增加录入了1.7万余个生僻汉字。此版本在保留总体结构的基础上,从条文强制改为全文强制,但增加了“实现的级别”一章,定义了三个实现级别:

  • 级别1:支持中日韩统一表意文字和中日韩统一表意文字扩展区A的汉字(所有具备中文信息处理和交换功能的产品均应满足此级别。与上一版的“部分强制”相比,实际要求“增加四字节编码部分的CJK统一汉字”的 66 字。)
  • 级别2:在级别1的基础上额外支持资料性附录E中明确的《通用规范汉字表》中没有包含在级别1之内的 8105 个汉字(操作系统、数据库管理系统、中间件等系统软件和支撑软件均应满足此级别。)
  • 级别3:支持GB 18030-2022中所规定的全部汉字以及康熙部首(GB/T 4754《国民经济行业分类》中任何用于政务服务和公共服务的信息技术产品和信息系统应均满足此级别。)

Unicode支持

[编辑]
不同GB 18030版本中Unicode码位的映射更动
GB 字节串 Unicode 码位
GB 18030-2000 GB 18030-2005
A8 BC (ḿ) U+E7C7 U+1E3F ḿ
81 35 F4 37 U+1E3F ḿ U+E7C7

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

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

在GB 18030-2022中,剩余的24个PUA码位已经被去除或更改对应,所有有意义字符都已经映射到正式的 Unicode 码位上。[5]

国标码码表中私有区码位的演变
GB 字节串 Unicode 码位 [a]
GBK 1.0[6] GB 18030-2005 Unicode 4.1 GB 18030-2022[5]
A6 D9[7]: 108  U+E78D U+FE10 ︐
A6 DA U+E78E U+FE12 ︒
A6 DB U+E78F U+FE11 ︑
A6 DC U+E790 U+FE13 ︓
A6 DD U+E791 U+FE14 ︔
A6 DE U+E792 U+FE15 ︕
A6 DF U+E793 U+FE16 ︖
A6 EC U+E794 U+FE17 ︗
A6 ED U+E795 U+FE18 ︘
A6 F3 U+E796 U+FE19 ︙
A8 BC U+E7C7 U+1E3F ḿ
A8 BF U+E7C8 U+01F9 ǹ
A9 89 U+E7E7 U+303E 〾
A9 8A U+E7E8 U+2FF0 ⿰
A9 8B U+E7E9 U+2FF1 ⿱
A9 8C U+E7EA U+2FF2 ⿲
A9 8D U+E7EB U+2FF3 ⿳
A9 8E U+E7EC U+2FF4 ⿴
A9 8F U+E7ED U+2FF5 ⿵
A9 90 U+E7EE U+2FF6 ⿶
A9 91 U+E7EF U+2FF7 ⿷
A9 92 U+E7F0 U+2FF8 ⿸
A9 93 U+E7F1 U+2FF9 ⿹
A9 94[7]: 173  U+E7F2 U+2FFA ⿺
A9 95 U+E7F3 U+2FFB ⿻
FE 50 U+E815 U+2E81 ⺁
FE 51 U+E816 U+20087 𠂇 [b] U+E816
FE 52 U+E817 U+20089 𠂉 [c] U+E817
FE 53 U+E818 U+200CC 𠃌 [d] U+E818
FE 54 U+E819 U+2E84 ⺄
FE 55 U+E81A U+3473 㑳
FE 56 U+E81B U+3447 㑇
FE 57 U+E81C U+2E88 ⺈
FE 58 U+E81D U+2E8B ⺋
FE 59 U+E81E U+9FB4 龴
FE 5A U+E81F U+359E 㖞
FE 5B U+E820 U+361A 㘚
FE 5C U+E821 U+360E 㘎
FE 5D U+E822 U+2E8C ⺌
FE 5E U+E823 U+2E97 ⺗
FE 5F U+E824 U+396E 㥮
FE 60 U+E825 U+3918 㤘
FE 61 U+E826 U+9FB5 龵
FE 62 U+E827 U+39CF 㧏
FE 63 U+E828 U+39DF 㧟
FE 64 U+E829 U+3A73 㩳
FE 65 U+E82A U+39D0 㧐
FE 66 U+E82B U+9FB6 龶
FE 67 U+E82C U+9FB7 龷
FE 68 U+E82D U+3B4E 㭎
FE 69 U+E82E U+3C6E 㱮
FE 6A U+E82F U+3CE0 㳠
FE 6B U+E830 U+2EA7 ⺧
FE 6C U+E831 U+215D7 𡗗 [e] U+E831
FE 6D U+E832 U+9FB8 龸
FE 6E U+E833 U+2EAA ⺪
FE 6F U+E834 U+4056 䁖
FE 70 U+E835 U+415F 䅟
FE 71 U+E836 U+2EAE ⺮
FE 72 U+E837 U+4337 䌷
FE 73 U+E838 U+2EB3 ⺳
FE 74 U+E839 U+2EB6 ⺶
FE 75 U+E83A U+2EB7 ⺷
FE 76 U+E83B U+2298F 𢦏 [f] U+E83B
FE 77 U+E83C U+43B1 䎱
FE 78 U+E83D U+43AC 䎬
FE 79 U+E83E U+2EBB ⺻
FE 7A U+E83F U+43DD 䏝
FE 7B U+E840 U+44D6 䓖
FE 7C U+E841 U+4661 䙡
FE 7D U+E842 U+464C 䙌
FE 7E U+E843 U+9FB9 龹
FE 80 U+E844 U+4723 䜣
FE 81 U+E845 U+4729 䜩
FE 82 U+E846 U+477C 䝼
FE 83 U+E847 U+478D 䞍
FE 84 U+E848 U+2ECA ⻊
FE 85 U+E849 U+4947 䥇
FE 86 U+E84A U+497A 䥺
FE 87 U+E84B U+497D 䥽
FE 88 U+E84C U+4982 䦂
FE 89 U+E84D U+4983 䦃
FE 8A U+E84E U+4985 䦅
FE 8B U+E84F U+4986 䦆
FE 8C U+E850 U+499F 䦟
FE 8D U+E851 U+499B 䦛
FE 8E U+E852 U+49B7 䦷
FE 8F U+E853 U+49B6 䦶
FE 90 U+E854 U+9FBA 龺
FE 91 U+E855 U+241FE 𤇾 [g] U+E855
FE 92 U+E856 U+4CA3 䲣
FE 93 U+E857 U+4C9F 䲟
FE 94 U+E858 U+4CA0 䲠
FE 95 U+E859 U+4CA1 䲡
FE 96 U+E85A U+4C77 䱷
FE 97 U+E85B U+4CA2 䲢
FE 98 U+E85C U+4D13 䴓
FE 99 U+E85D U+4D14 䴔
FE 9A U+E85E U+4D15 䴕
FE 9B U+E85F U+4D16 䴖
FE 9C U+E860 U+4D17 䴗
FE 9D U+E861 U+4D18 䴘
FE 9E U+E862 U+4D19 䴙
FE 9F U+E863 U+4DAE 䶮
FE A0 U+E864 U+9FBB 龻
备注
a.^ 蓝色代表私用区码位
b.^ GB 18030-2022将U+20087 𠂇 映射至0x95329031
c.^ GB 18030-2022将U+20089 𠂉 映射至0x95329033
d.^ GB 18030-2022将U+200CC 𠃌 映射至0x95329730
e.^ GB 18030-2022将U+215D7 𡗗 映射至0x9536B937
f.^ GB 18030-2022将U+2298F 𢦏 映射至0x9630BA35
g.^ GB 18030-2022将U+241FE 𤇾 映射至0x9635B630

字节结构

[编辑]

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

GB 18030编码[8]: 3 [9]: 252 [10]
GB 18030 码位数 Unicode[b]
字节1(最高位) 字节2 字节3 字节4
00 – 7F 128 0000 – 007F
80 — 错误[c]
81 – FE 40 – FE 除去 7F[d] 23940 0080 – FFFF 除去 D800 – DFFF[e]
81 – 84 30 – 39 81 – FE 30 – 39 39420
85 — (12600) (未来字符拓展)
86 – 8F — (126000) (未来汉字拓展)
无 — D800 – DFFF[f]
90 – E3 30 – 39 81 – FE 30 – 39 1048576 1 0000 – 10 FFFF
E4 – FC — (315000) (未来标准拓展)
FD – FE — (25200) (用户造字区域)
FF — 错误
总计 1112064

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

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

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

U+00DE (Þ) → 81 30 89 37
U+00DF (ß) → 81 30 89 38
U+00E0 (à) → A8 A4
U+00E1 (á) → A8 A2
U+00E2 (â) → 81 30 89 39
U+00E3 (ã) → 81 30 8A 30

WHATWG和W3C的GB 18030实现通过一张“位置偏移表”记录GB 18030四字节区中连续的几块碎片,以便高效处理转换。[13]ICU[10]和glibc也都对大块连续的区域使用了类似的策略。

参见

[编辑]

注釋

[编辑]
  1. ^ 严格来说不是,因为ASCII字节会出现在GBK拓展二字节部分的后半字
  2. ^ 包含66个“非字符”
  3. ^ 虽然两个版本的GB 18030都认为此码位不正确(其中GB 18030-2000指修订版,其初版却同时有单双字节欧元[11][12]),但是ICU的定义错误称其为有效码位。出于GBK兼容性考虑,WHATWG的GBK/GB 18030二合一解码器将此字节视作欧元符号。
  4. ^ 参见汉字内码扩展规范条目细分。
  5. ^ 上一行的码位使用二字节GBK编码,下一行的码位按照顺序以四字节编码补全覆盖面。此段最后一个实际用上的编码为U+FFFF的84 31 A4 39(2005版239页),不过划区时画到了84 39 FE 39。
  6. ^ 这些为代理对字符(英语:surrogate code point),在UTF-16之外没有实际意义。

参考资料

[编辑]
  1. ^ GB 18030: A mega-codepage. 
  2. ^ CESI. GB18030 符合性问与答 [GB18030 compliance FAQ]. CESI Certification Center. 2009-07-08 [2016-10-12]. (原始内容存档于2016-09-28). Page 4 同时达到以下两个要求的产品,为符合GB 18030-2005强制部分的产品:①产品可以正确输入、输出、处理GB 18030-2005强制部分规定的全部汉字字符;②产品可以正确识别GB 18030-2005强制性部分规定的全部汉字字符对应的编码。 [A product compliant with the mandatory part of GB 18030 must be able to correctly a) input, output and process all Chinese characters defined in the mandatory set; b) recognize encodings for characters in the mandatory set.] 
  3. ^ GB 18030—2022《信息技术 中文编码字符集》发布并出版. 微信公众平台. 2022-08-12 [2024-01-28]. (原始内容存档于2024-01-28) (中文). 
  4. ^ Encoding Standard # gb18030-index. WHATWG. [2016-09-11]. (原始内容存档于2015-02-04). 
  5. ^ 5.0 5.1 Lunde, Dr Ken. The GB 18030-2022 Standard. Medium. 4 August 2022 [7 August 2022]. (原始内容存档于2022-08-07) (英语). 
  6. ^ Group:GBK外字. GlyphWiki. [11 September 2016]. (原始内容存档于2019-02-16). 
  7. ^ 7.0 7.1 Lunde, Ken. CJKV Information Processing. O'Reilly Media, Inc. December 2008 [11 September 2016]. ISBN 978-0-596-51447-1. 
  8. ^ Standardization Administration of China (SAC). GB 18030-2005: Information Technology—Chinese coded character set. 2005-11-18. 
  9. ^ Standardization Administration of China (SAC). GB 18030-2000: Information Technology—Chinese coded character set for information interchange — Extension for the basic set. 2000-03-17. 
  10. ^ 10.0 10.1 Authoritative mapping table between GB18030-2000 and Unicode (页面存档备份,存于互联网档案馆). ICU – International Components for Unicode. 2001-02-21. Accessed 2016-09-04.
  11. ^ GB 18030-2000报批稿 (PDF). [2017-08-15]. (原始内容 (PDF)存档于2017-08-15). 
  12. ^ Summary, Explanations, And Remarks: GB 18030-2000 (PDF). (原始内容 (PDF)存档于2021-07-03). 
  13. ^ Encoding Standard # gb18030-index. WHATWG. [2016-09-24]. (原始内容存档于2015-02-04). 

外部連結

[编辑]