GB18030 字符集

Posted programer-xinmu78

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GB18030 字符集相关的知识,希望对你有一定的参考价值。

gb18030

 编辑
国家标准GB18030-2005《信息技术 中文编码字符集》是我国继GB2312-1980和GB13000.1-1993之后最重要的汉字编码标准,是我国计算机系统必须遵循的基础性标准之一。 GB18030有两个版本:GB18030-2000和GB18030-2005。GB18030-2000是GBK的取代版本,它的主要特点是在GBK基础上增加了CJK统一汉字扩充A的汉字。GB18030-2005的主要特点是在GB18030-2000基础上增加了CJK统一汉字扩充B的汉字。[1] 
 
中文名
《信息技术 中文编码字符集》
国标号
GB18030
发布日期
2000-3-17;2005-11-8
发布机构
国家质量技术监督局
 

概念简介

编辑
国家标准GB18030-2000《信息交换用汉字编码字符集基本集的补充》是我国继GB2312-1980和GB13000-1993之后最重要的汉字编码标准,是我国计算机系统必须遵循的基础性标准之一。
GB18030-2000编码标准是由信息产业部和国家质量技术监督局在2000年 3月17日联合发布的,并且将作为一项国家标准在2001年的1月正式强制执行。
GB18030-2005《信息技术中文编码字符集》是我国自主研制的以汉字为主并包含多种我国少数民族文字(如藏、蒙古、傣、彝、朝鲜、维吾尔文等)的超大型中文编码字符集强制性标准,其中收入汉字70000余个。[2] 
 

版本区别

编辑
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。[3]  GB18030-2005的单字节编码部分、双字节编码部分和四字节编码部分的CJK统一汉字扩充A(即0x8139EE39—0x82358738)部分为强制性。
 

适用范围

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

达到要求

编辑
问:产品达到哪些要求才算符合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。码位总体结构见右图。[4] 
 

字汇

编辑
 

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

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所收录的字符将在新版本中增加。[6] 
 

汉字

编辑
 

GB18030-2000汉字

如下表所示,GB18030-2000收录了27533个汉字:
类别
码位范围
码位数
字符数
字符类型
双字节部分
第一字节0xB0-0xF7
6768
6763
汉字
第二字节0xA1-0xFE
第一字节0x81-0xA0
6080
6080
汉字
第二字节0x40-0xFE
第一字节0xAA-0xFE
8160
8160
汉字
第二字节0x40-0xA0
四字节部分
第一字节0x81-0x82
25200
6530
CJK统一汉字扩充A
第二字节0x30-0x39
第三字节0x81-0xFE
第四字节0x30-0x39
27533就是6763+6080+8160+6530。双字节部分的6763+6080+8160=21003个汉字就是GBK的21003个汉字。
在Unicode中,CJK统一汉字扩充A有6582个汉字,为什么这里只有6530个汉字?
这是因为在GBK时代,双字节部分已经收录过CJK统一汉字扩充A的52个汉字,所以还余6530个汉字。[7] 
 

GB18030-2005汉字

如下表所示,GB18030-2005收录了70244个汉字:
类别
码位范围
码位数
字符数
字符类型
双字节部分
第一字节0xB0-0xF7
6768
6763
汉字
第二字节0xA1-0xFE
第一字节0x81-0xA0
6080
6080
汉字
第二字节0x40-0xFE
第一字节0xAA-0xFE
8160
8160
汉字
第二字节0x40-0xA0
四字节部分
第一字节0x81-0x82
25200
6530
CJK统一汉字扩充A
第二字节0x30-0x39
第三字节0x81-0xFE
第四字节0x30-0x39
第一字节0x95-0x98
50400
42711
CJK统一汉字扩充B
第二字节0x30-0x39
第三字节0x81-0xFE
第四字节0x30-0x39
70244就是6763+6080+8160+6530+42711。[7] 
 

版本变化

编辑
GB18030-2005相对于GB18030-2000主要有以下变化:
1、在四字节字符表中增加CJK统一汉字扩充B和已经在GB13000中编码的我国少数民族文字字符的字形。其实GB18030-2000已经映射了这些码位,但GB18030-2000没有给出这些字符的字形。
2、调整字符?的编码。
3、去掉了单字节编码的欧元符号(0x80)。
(纠正:其实GBK和GB18030-2000都没有单字节编码的欧元符号,微软的CP936才有这个符号并定义在0x80)[4] 
 

制定标准

编辑
按国际惯例,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的实施将有利于国产软件的发展并形成规模,使我国的中文信息技术再上一个台阶。[4] 
 

标准历程

编辑
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将结束其历史使命。[4] 

以上是关于GB18030 字符集的主要内容,如果未能解决你的问题,请参考以下文章

python中文字符乱码(GB2312,GBK,GB18030相关的问题)

刨根究底字符编码之五——简体汉字编码方案(GB2312GBKGB18030GB13000)以及全角半角CJK

字符集编码cp936ANSIUNICODEUTF-8GB2312GBKGB18030DBCSUCS

常用字符集编码详解:ASCII GB2312GBKGB18030UTF-8unicode

logstash采集中文乱码

所有的字符编码由System.Text.Encoding类获取所有的字符编码如Unicode编码GB18030编码(UTF-8)简体中文(GB2312)