GBK

义项:汉字内码扩展规范编码
GBK

GBK是《汉字内码扩展规范》的简称,全称Chinese Internal Code Specification,是GB 2312-80的扩展编码方案,以双字节为主,在保留GB 2312全部字符的基础上大幅扩充汉字与符号的容量。该规范由全国信息技术标准化技术委员会于1995年12月制订,包含21886个汉字和图形符号,其中汉字21003个。GBK并非国家正式标准,而是技术规范指导性文件,依靠微软Windows代码页936的广泛部署成为事实通用编码,后于2000年被国家标准GB 18030-2000取代。

目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

GBK是《汉字内码扩展规范》的缩写,英文全称为Chinese Internal Code Specification,1.0版由全国信息技术标准化技术委员会于1995年12月1日制订,同年12月15日由国家技术监督局标准化司与电子工业部科技与质量监督司以技监标函的形式联合公布[1]。名称中的“GB”取自“国家标准”的汉语拼音首字母,“K”取自“扩展”的拼音首字母[2]。

它属于双字节编码体系中的变长方案,单字节部分与ASCII保持一致,双字节部分用于汉字与全角符号,向下兼容GB 2312字符,同时覆盖GB 13000.1-93所规定的全部中日韩汉字[3]。按规范统计,GBK共收录21886个汉字与图形符号,其中汉字(含部首和构件)21003个,图形符号883个[1]。

原理

GBK沿用扩展ASCII的编码思路:0x00至0x7F范围内的字节对应ASCII字符,占1个字节;汉字与全角符号使用2个字节,首字节范围是0x81至0xFE,第二字节落在0x40至0x7E与0x80至0xFE两段内,并剔除行末的0x7F[1]。这一总体码域对应着23940个可用的双字节位置[3]。

码位被划分为若干分区:GBK/1为GB 2312的非汉字符号,GBK/2为GB 2312汉字,GBK/3与GBK/4为扩充汉字,GBK/5为扩充的非汉字字符,另设用户自定义区[4]。与GB 2312要求两个字节均大于0x7F不同,GBK只要求首字节高位为1,第二字节可以落入0x40至0x7E区间,因此能使用的双字节组合明显增多,可容纳的字数也随之提升[5]。

解码时,程序读取字节后先判断其是否小于0x80:若小于则按单字节ASCII输出,否则与后续字节合并查表得到一个汉字,因此字节流在任意位置截断都可能造成后续字节被错位解释,这一特性构成了下面所讲的部分局限。

发展历程

1993年,包含中国大陆、台湾、日本、韩国共20902个汉字的Unicode 1.1发布,中国随后公布了与之对应的国家标准GB 13000.1-93[1]。原有的GB 2312-80只收录6763个汉字,制定之后新简化的字、人名用字、繁体字以及日韩所用汉字大多无法表示,业界因此需要一种过渡方案[5]。

微软利用GB 2312-80中闲置的编码空间收录GB 13000.1-93的字符,形成了代码页936的字码表,并在Windows 95简体中文版和Windows NT 3.51中实现[1]。1995年12月,全国信息技术标准化技术委员会在此基础上定稿GBK 1.0,规范相对代码页936略有增补,新增字符在GB 13000.1-1993中并无对应码位[6]。

由于Windows在中文市场的大量装机,GBK虽未被列为正式国家标准,却成为事实上的通用简体中文编码[6]。2000年3月17日,国家质量技术监督局发布GB 18030-2000,在保留全部GBK汉字的前提下扩展第二字节取值并引入四字节编码,将GBK整体作为子集纳入[1]。2002年,互联网号码分配机构将GBK登记为互联网字符集名称,其映射以Windows-936为准。

应用

GBK最主要的落地形态是微软Windows的代码页936,长期作为简体中文版系统的默认编码,命令行环境的默认代码页亦为936[7]。中文版Windows 95、Windows 98、Windows NT以及后续的Windows 2000、Windows XP等系统均支持GBK方案[8]。

在字体与出版环节,字库厂商按GBK字符集扩充字模,使字库可以覆盖21003个汉字,缓解了早期国标字库缺字的问题[8]。在软件层面,Qt等开发框架提供GBK文本编解码器,用于在GB 18030、GBK、GB 2312之间转换文本[9]。数据库与信息系统中也常以GBK作为中文数据的存储与传输编码,把英文按单字节、中文按双字节处理[3]。

在互联网上,GBK的份额逐步收缩但仍有一定存量:2022年前后的统计显示,声明使用GBK的中国及地区网页约占1.9%,全球范围内不足0.07%,而主流浏览器在遇到标注为GB 2312的页面时通常按GBK解码[10]。

局限

GBK的码位总量有限,无法容纳ISO 10646的全部编码空间,这正是其后来被GB 18030取代的直接原因。GBK 1.0新增的95个字符在GB 13000.1-1993中没有对应码位,只能暂用Unicode私用区码点,跨系统交换时容易失配[6]。

GBK与微软代码页936并非完全等同:代码页936在0x80位置定义了欧元符号,而这一位置在GBK规范中没有定义;反过来,GBK中部分字符在早期代码页936中未能编码,到Windows 7时代仍不支持对这些字符进行编码[7]。由于三者常被混用,“GBK”“GB 2312”“Windows-936”在不少软件中实际都指对GBK的部分支持,字符集边界并不清晰[7]。

作为多字节编码,GBK在文本截断、拼接和跨语言混排时缺少自同步能力,日文汉字、朝鲜语谚文等字符也难以完整表达,这使它在多语言环境中不如Unicode方案适用[5]。

参见

  • GB 2312 —— GBK所扩展的前一代简体中文编码标准。

  • GB 18030 —— 取代GBK的强制性国家标准,将GBK作为子集保留。

  • Unicode —— GBK的字符集部分参考了与之对应的ISO 10646字符集。

  • UTF-8 —— 与之并行的变长Unicode编码方案。

  • Big5 —— 通行于台湾、香港的繁体中文字符编码。

参考资料

  1. 维基百科,自由的百科全书 [引用日期2026-10-29]
  2. 漢字內碼擴展規範 [引用日期2026-10-29]
  3. 数据库必知词汇:GBK [引用日期2026-10-29]
  4. GBK 汉字内码扩展规范编码表 [引用日期2026-10-29]
  5. aliyun.com 上的网页 [引用日期2026-10-29]
  6. GBK (character encoding) - The Wayback Machine [引用日期2026-10-29]
  7. Code page 936 (Microsoft Windows) - The Wayback Machine [引用日期2026-10-29]
  8. Python基础二 [引用日期2026-10-29]
  9. GBK文本编解码器 [引用日期2026-10-29]
  10. GBK (character encoding) [引用日期2026-10-29]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-28T18:53:27Z

历史版本

本条目引用的词条
双字节编码 GB 2312 GB 18030 Unicode UTF-8 Big5