汉字内码扩展规范

汉字内码扩展规范，简称GBK，全名为《汉字内码扩展规范(GBK)》1.0版，由中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订，国家技术监督局标准化司和电子工业部科技与质量监督司1995年12月15日联合以《技术标函[1995]229号》文件的形式公布。 GBK共收录21886个汉字和图形符号，其中汉字（包括部首和构件）21003个，图形符号883个。

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作为子集全部保留。

 历史 
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。

具体来说，定义的是下列字节：

+GBK的编码范围范围  第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的编码，红色是用户定义区域。没有颜色区域是不正确的代码组合。thumb|300px

 与其他编码的关系 
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编码不含此字符。

 输入方法 
VimIM在Vim环境中，可以直接键入十进制或十六进制GBK 码。既不需要启动输入法，也不需要码-{表}-。

 参见 
国家标准代码
Unicode

注釋

 参考文献 

 外部链接 
 ICU:UNICODE 
 -GBK table 
 微软CP936编码表 
 GBK编码表 

Category:中文信息处理
Category:字符集
Category:Windows代码页