GB2312 是我国最早正式发布的简体中文汉字编码国家标准,全称信息交换用汉字编码字符集基本集,这份标准主要用来解决早期计算机没有统一中文编码,不同设备中文乱码,信息无法互通的问题,它属于中文编码领域非常经典的基础标准,在国产早期操作系统中文软件单片机工控设备老旧档案系统里面至今还能见到 GB2312 的应用,GB2312 一共收录六千七百六十三个简体汉字,同时包含六百八十多个符号,涵盖标点符号数字字母罗马数字日文平假名片假名等内容,编码采用双字节设计,每一个汉字由两个字节来表示,第一个字节和第二个字节都落在高位区间,这样可以和单字节的 ASCII 编码区分开,避免编码冲突,需要重点区分,GB2312 只收录常用简体汉字,生僻字古汉字少数民族文字并不在这个字符集里面,后续推出的 GBK 以及 GB18030 都是在 GB2312 基础上做扩展,并且向下兼容 GB2312 编码。制定 GB2312 的核心原因,是在计算机普及初期,国内缺少统一中文编码规范,不同厂商自定义编码,跨平台传输文本就会出现乱码,标准统一之后,中文文本可以在不同计算机打印机通信设备之间完成信息交换,满足办公印刷数据库电报等场景的中文处理需求。
字符集构成
汉字部分 一级汉字三千七百五十五个,按照拼音排序,属于日常高频使用汉字
二级汉字三千零八个,按照部首笔画排序,属于次常用汉字
符号部分 包含一般符号序号数字拉丁字母希腊字母日文假名汉语拼音符号等六百八十余个
编码原理
双字节编码,高位字节范围,低位字节范围,编码区位结构,GB2312 把所有字符划分成区和位,一共 94 个区,每区 94 个位,也就是区位码,区位码加上固定偏移量之后就得到机内码,这个区位结构是 GB2312 很有特点的设计,程序员经常会通过区位码查询汉字对应的编码位置。
兼容与扩展关系
GB2312 基础简体常用汉字编码
GBK 在 GB2312 基础扩充,增加繁体汉字生僻字,完全兼容 GB2312
GB18030 继续扩充,包含更多文字,支持多字节编码,向下兼容 GB2312 和 GBK
应用场景
早期 DOS 中文系统 国产中文 DOS 平台默认编码就是 GB2312
老式数据库 早年政务财务老数据库文本字段大量使用 GB2312 编码
嵌入式工控设备 部分老旧单片机打印机终端依旧沿用 GB2312 字库
印刷排版 早期中文照排系统采用 GB2312 字符集
GB2312 的局限性
汉字数量有限,遇到生僻人名地名古文字就无法显示,会出现缺字方框
不支持繁体汉字,不支持少数民族文字
单双字节混合编码,处理逻辑比 UTF8 这类统一编码更复杂
现代新系统默认编码大多不再使用 GB2312,现在主流网页跨平台传输优先使用 UTF8,但是历史遗留系统迁移的时候,仍然需要识别 GB2312 编码,否则文件打开就会乱码。
综合来看 GB2312 是国内简体中文编码的奠基标准,虽然现在已经不是主流编码,但是理解 GB2312 的编码原理和兼容关系,对老旧系统改造编码转换处理历史文档都有非常重要的价值。
【常见问题】
问题 1 GB2312 是不是支持繁体汉字
回答 1 GB2312 原始字符集不支持繁体汉字,GB2312 只收录简体常用汉字,繁体汉字是后续 GBK 扩展版本才补充进去,并且 GBK 向下兼容 GB2312。
问题 2 GB2312 一共收录多少个汉字
回答 1 GB2312 一共收录六千七百六十三个简体汉字,分成一级汉字和二级汉字,一级汉字按拼音排序,二级汉字按部首笔画排序。
问题 3 GB2312 和 UTF8 是什么关系
回答 1 GB2312 是国内简体中文双字节编码,UTF8 是国际通用可变长编码,二者编码体系不一样,文本如果原本是 GB2312 编码,用 UTF8 打开就会出现乱码,需要做编码转换。
问题 4 GB2312 编码是单字节还是双字节
回答 1 GB2312 汉字采用双字节编码,依靠两个字节组合表示一个汉字,这样设计是为了和单字节 ASCII 编码区分,防止编码冲突。
【免责申明】
本文内容仅为 GB2312 编码标准科普解读,标准相关修订与配套规范以国家标准化管理委员会正式发布文件为准,本文不构成软件系统改造编码迁移的专业技术决策依据。


