汉字内码扩展规范
汉字内码扩展规范,简称GBK,全名为《汉字内码扩展规范(GBK)》1.0版,由中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订,国家技术监督局标准化司和电子工业部科技与质量监督司1995年12月15日联合以《技术标函[1995]229号》文件的形式公布。 GBK共收录21886个汉字和图形符号,其中汉字(包括部首和构件)21003个,图形符号883个。
GBK 字节分配。 | |
MIME / IANA | GBK |
---|---|
别名 | CP936, MS936, windows-936, csGBK |
语言 | 国际,但以简体中文为主,浏览器多以GB 18030解码 |
标准 | GBK 1.0 |
现状 | 非正式国标编码,已被GB 18030取代 |
分类 | 扩展ASCII、[lower-alpha 1]变长编码、CJK |
拓展自 | EUC-CN |
前用 | GB2312 |
后续 | GB 18030 |
GBK为“国家标准扩展”的汉语拼音(Guójiā Biāozhǔn Kuòzhǎn)中的“国”“标”“扩”第一个声母。英文全称Chinese Internal Code Extension Specification。
GBK 只为“技术规范指导性文件”,不属于国家标准。国家质量技术监督局于2000年3月17日推出了GB 18030-2000标准,以取代GBK。GB 18030-2000除保留全部GBK编码汉字,在第二字节把能使用范围再度进行扩展,增加了大约一百个汉字及四字节编码空间,但是将GBK作为子集全部保留。请参看GB 18030。
历史
1993年,Unicode 1.1版本推出,收录中国大陆、台湾、日本及韩国通用字符集的汉字,总共有20,902个。中国大陆订定了等同于Unicode 1.1版本的“GB 13000.1-93”“信息技术通用多八位编码字符集(UCS)第一部分:体系结构与基本多文种平面”。
由于GB 2312-80只收录6763个汉字,有不少汉字,如部分在GB 2312-80推出以后才简化的汉字(如“”),部分人名用字(如中国前总理朱镕基的“”字),台湾及香港使用的繁体字,日语及朝鲜语汉字等,并未有收录在内。于是厂商微软利用GB 2312-80未使用的编码空间,收录GB 13000.1-93全部字符制定了GBK编码。
根据微软资料,GBK是对GB2312-80的扩展,也就是CP936字码表(Code Page 936)的扩展(之前CP936和GB 2312-80一模一樣),最早实现于Windows 95简体中文版。虽然GBK收录GB 13000.1-93的全部字符,但GBK是一种编码方式并向下兼容GB2312;而GB 13000.1-93等同于Unicode 1.1是一种字符集,它的几种编码方式如UTF8、UTF16LE等,与GBK完全不兼容。
编码方式
字符有一字节和双字节编码,00
–7F
范围内是第一个字节,和ASCII保持一致,此范围内严格上说有96个文字和32个控制符号。
之后的双字节中,前一字节是双字节的第一位。总体上说第一字节的范围是81
–FE
(也就是不含80
和FF
),第二字节的一部分领域在40
–7E
,其他领域在80
–FE
。
具体来说,定义的是下列字节:
范围 | 第1字节 | 第2字节 | 编码数 | 字数 |
---|---|---|---|---|
水准GBK/1 | A1 –A9 | A1 –FE | 846 | 717 |
水准GBK/2 | B0 –F7 | A1 –FE | 6,768 | 6,763 |
水准GBK/3 | 81 –A0 | 40 –FE (7F 除外) | 6,080 | 6,080 |
水准GBK/4 | AA –FE | 40 –A0 (7F 除外) | 8,160 | 8,160 |
水准GBK/5 | A8 –A9 | 40 –A0 (7F 除外) | 192 | 166 |
用户定义 | AA –AF | A1 –FE | 564 | |
用户定义 | F8 –FE | A1 –FE | 658 | |
用户定义 | A1 –A7 | 40 –A0 (7F 除外) | 672 | |
合计: | 23,940 | 21,886 |
双字节符号可以表达的64K空间如下图所示。绿色和黄色区域是GBK的编码,红色是用户定义区域。没有颜色区域是不正确的代码组合。
与其他编码的关系
GBK向下完全兼容GB2312-80编码。支持GB2312-80编码不支持的部分中文姓,中文繁体,日文假名,还包括希腊字母以及俄语字母等字母。不过这种编码不支持韩国字,也是其在实际使用中与unicode编码相比欠缺的部分。
上述GBK/1和GBK/2的领域即GB 2312-80用通常方法编码的区域。GB 2312(正确说法是其根据EUC-CN的编码)和ISO/IEC 2022中调用GR其他的94²字符集一样,A1
–FE
的范围开始读取字节对。这是上图中右下角的部分。但是,GB 2312中对于AA
–AF
和F8
–FE
区域是空的,没有赋予编码。于是GBK就在这些领域里进行拓展。二者剩余部分作为用户定义区。
更重要的是,GBK进行了字节范围的扩展。ISO/IEC 2022中GR区域的字数有94²=8,836字的限制。只要放弃ISO/IEC 2022中针对图形文字和控制文字赋予严格的范围的模式,下位字节为单字节文字,上位字节对保留对应字符的功能,潜在的128²=16,384的代码位置就可以使用。GBK采用其中的一部分,第一个字节从A1
–FE
(每个字节有94个选项)扩展成81
–FE
(126个选项),第二字节的范围是40
–FE
(191个选项),总共有24066(126*191)个位置。
與CP936字码表比較
微软在稍新一点的CP936中使用单字节 0x80 代表欧元字符(U+20AC),而《规范》之GBK编码不含此字符。
参见
- 国家标准代码
- Unicode
注釋
- 严格来说不是,因为ASCII字节会出现在GBK拓展二字节部分的后半字