GB 2312

GB 2312，在计算机科学领域内通常簡稱GB（或简稱GB0），是指依据中华人民共和国推荐性国家标准《信息交换用汉字编码字符集·基本集》（GB/T 2312-1980）制定的简体中文字符集。

历史
该种编码由中国国家标准总局於1980年发布，1981年5月1日实施。该种编码通行于中国大陆；新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB 2312编码。

GB 2312标准共收录6763个汉字，其中一级汉字3755个，二级汉字3008个；同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、注音符号、俄语西里尔字母在内的682个字符。

GB 2312编码的出现，基本满足了汉字的计算机处理需要，它所收录的汉字已经覆盖中国大陆99.75%的使用频率。但对于人名、古汉语等方面出现的罕用字和繁體字，“GB 2312”编码不能处理，而是由一系列的国标辅助集负责编码和显示（如GB/T 12345《信息交换用汉字编码字符集　第一辅助集》、GB/T 7589 《信息交换用汉字编码字符集 第二辅助集》及GB/T 7590《信息交换用汉字编码字符集 第四辅助集》），但是 ISO-2022-CN-EXT 最终未给国标除了 “GB 2312”编码 以外的其他辅助集提供逃逸字符串。后来GBK及GB 18030汉字字符集相继出现以解決這些問題。

 分区表示 
“GB 2312”编码中对所收汉字进行了“分区”处理，每区含有94个汉字／符号，共计94个区。实际上，“GB 2312”编码只使用了87区。

用所在的区和位来表示字符（实际上就是码位）的方法称为区位码（或许叫“区位号”更为恰当）。例如“-{万}-”字在45区82位，所以“-{万}-”字的区位码是 45-82（45是“区码”，82是“位码”）。在储存进电脑时，电脑会在区位码上加上特定数字后才保存进内存以确保和其他编码兼容（如 ASCII）。转码后，区位码的“区码”会变成“高位字节”，而“位码”会变成“低位字节”。

下列是“GB 2312”编码分区后在区段内储存的字符：
 01~09区（682个）：特殊符号、数字、英文字符、制表符等，包括拉丁字母、希腊字母、日文平假名及片假名字母、注音符号、俄语西里尔字母等在内的682个全角字符；
 10~15区：空区，留待扩展；在附录3，第10区推荐作为 GB 1988—80 中的94个图形字符区域（即第3区字符之半形版本）。 
 16~55区（3755个）：常用汉字（也称一级汉字），按拼音排序；
 56~87区（3008个）：非常用汉字（也称二级汉字），按部首/笔画排序；
 88~94区：空区，留待扩展。

 字节结构 
在“GB 2312”字符集内，每个汉字及符号的码位使用两个字节来表示。第一个字节称为“高位字节”，对应分区的编号（把区位码的“区码”加上特定值）；第二个字节称为“低位字节”，对应区段内的个别码位（把区位码的“位码”加上特定值）。

 ISO 2022-CN（国标码、交换码） 

为了避开ASCII字符中的不可显示字符（十六进制为0×00至0×1F，十进制为0至31）及空格字符（十六进制为0×20，十进制为32），国标码（又称为交换码）参考 ISO 2022 规定表示非 ASCII 字符双字节编码范围为十六进制为 <21 21>-<7E 7E>，十进制为 (33, 33) 至 (126, 126)。因此，在进行码位转换时，须将“区码”和“位码”分别加上32（十六进制为0×20）作为国标码。

在这个编码模式内，软件需要使用低端控制字符（C0），高端控制字符（C1）和US-ASCII字符集（GL）标注字符属于单字节（ASCII）还是双字节，相对容易造成乱码（如丢失控制/转义字符）。

在 “GB 2312”编码内，高位字节使用了0x21—0x77（把01—87区的区号加32或0×20），低位字节使用了0x21—0x7E（把01—94加上32或0×20）。

例：“-{万}-”字（区位码 45-82）的 ISO 2022 码十进制为：(45+32, 82+32) = (77, 114)，十六进制为：<4D 72>。

 EUC-CN（机内码、内码） 
因为国标码和通用的ASCII码冲突，因此后续为了方便辨认单字节和双字节的编码，部分厂商在 ISO 2022 的基础上把双字节字符的二进制最高位都从 0 换成 1，即相当于把 ISO 2022 的每个字节都再加上128（十六进制为0×80）得到“机内码”表示，简称“内码”。把“区码”和“位码”分别加上160（十六进制为0×A0）也可以得到相同的机内码表示，这种格式也就是EUC。使用“GB 2312”编码的程序通常采用 EUC 储存方法，以便兼容于ASCII。这种格式称为EUC-CN。浏览器编码表上的“GB2312”就是指这种表示法。

在 “GB 2312”编码内，高位字节使用了0xA1—0xF7（把01—87区的区号加160或0×A0），低位字节使用了0xA1—0xFE（把01—94加上160或0×A0）。非 ASCII 字符双字节编码范围为十六进制为 <A1 A1>-<FE FE>，十进制为 (161, 161) 至 (254, 254)。

例：“-{万}-”字（区位码 45-82）的 EUC 码十进制为：(45+160, 82+160) = (205, 242)，十六进制为：<CD F2>。

 HZ 
HZ 编码是由李楓峰在1988年发明的编码系统。其目的是在7字节的限制下（如电子邮件）储存 “GB 2312”编码 的双字节字符。其在 ISO 2022 编码字符的前后分别加上转义字符~{（7E 7B）和~}（7E 7D）后，使用正常的ASCII转码变成 ASCII 字符。部分机器也可以接受使用 EUC-CN 编码的转义字符。

例：“-{万}-”字（区位码 45-82）的 ISO 2022 码十六进制为 <4D 72>。加上转义字符后，字符串变成7E 7B 4D 72 7E 7D。HZ的编码即为~{Mr~}（M的ASCII码是0×4D，r的ASCII码是0×72）。

修訂
《信息交换用汉字 24x24 点阵字模集》（GB 5007.1—85）首次附錄對 “GB 2312”编码之更正，包括：
調整拉丁字母「g」的字形
補充六個拼音符號 ，用於汉语拼音
「」更正為「」
於第10區補充94個半字圖形字符（第3區之半形版本，相當於GB 1988—80）
於第11區加入第8區首32個拼音符號（包括以上補充六個）之半形版本。

GB 5007.1—1985曾将「」（84—80）更换成「」，但是后续修订（GB 5007.1—2001 和 GB/T 5007.1—2010）和其他字模集仍旧保留 “GB 2312”编码的繁体偏旁「」之「」。

“GB 2312”编码本身一直未有修訂，但此等修訂部份收入相關字模集（下詳）、GB/T 12345、後續之GBK及GB 18030。

“GB 2312”编码亦用於ISO-IR-165。

 两种不同的“GB 2312”编码实现 
有两种不同的“GB 2312”编码实现，在它们之间存在少量的差别，其中至少有一个是错误的。

 区位码（EUC码）  GBK子集   GB2312.TXT   字符名称01-04 (<A1 A4>)间隔点01-10 (<A1 AA>)破折号
GBK子集与GBK/GB 18030兼容，GB2312.TXT则不兼容。后者基于ftp.unicode.org曾经提供的GB2312.TXT实现，于2011年由官方弃用，2016年9月时已无原文件踪迹。此外还有很多种厂商实现。

，微软.NET使用的是“GBK子集”实现。、libiconv-1.14、php-5.6、ActivePerl-5.20、Java 1.7、Python 3.4都使用“GB2312.TXT”实现。Ruby 2.2兼容两者编码，但内部使用“GBK子集”实现。W3C的编码技术指南规定，应将gb2312字节流视为GBK编码，与GB18030一并使用同一解码器解码。

字模集
GB 5007.1—1985《信息交换用汉字 24×24 点阵字模集》
GB 5007.2—1985《信息交换用汉字 24×24 点阵字模数据集》
GB 5199.1—1985《信息交换用汉字 15×16 点阵字模集》
GB 5199.2—1985《信息交换用汉字 15×16 点阵字模数据集》
GB 6345.1—1986《信息交换用汉字 32×32 点阵字模集》
GB 6345.2—1986《信息交换用汉字 32×32 点阵字模数据集》
GB/T 12034—1989《信息交换用汉字 32×32 点阵仿宋体字模集及数据集》
GB/T 12035—1989《信息交换用汉字 32×32 点阵楷体字模集及数据集》
GB/T 12036—1989《信息交换用汉字 32×32 点阵黑体字模集及数据集》
GB/T 12037—1989《信息交换用汉字 36×36 点阵宋体字模集及数据集》
GB/T 12038—1989《信息交换用汉字 36×36 点阵仿宋体字模集及数据集》
GB/T 12039—1989《信息交换用汉字 36×36 点阵楷体字模集及数据集》
GB/T 12040—1989《信息交换用汉字 36×36 点阵黑体字模集及数据集》
GB/T 12041—1989《信息交换用汉字 48×48 点阵宋体字模集及数据集》
GB/T 12042—1989《信息交换用汉字 48×48 点阵仿宋体字模集及数据集》
GB/T 12043—1989《信息交换用汉字 48×48 点阵楷体字模集及数据集》
GB/T 12044—1989《信息交换用汉字 48×48 点阵黑体字模集及数据集》
GB/T 13443—1992《信息交换用汉字 128×128 点阵楷体字模集及数据集》
GB/T 13444—1992《信息交换用汉字 128×128 点阵仿宋体字模集及数据集》
GB/T 13445—1992《信息交换用汉字 256×256 点阵楷体字模集及数据集》
GB/T 13446—1992《信息交换用汉字 256×256 点阵仿宋体字模集及数据集》
GB/T 13844—1992《图形信息交换用矢量汉字单线宋体字模集及数据集》
GB/T 13845—1992《图形信息交换用矢量汉字宋体字模集及数据集》
GB/T 13846—1992《图形信息交换用矢量汉字仿宋体字模集及数据集》
GB/T 13847—1992《图形信息交换用矢量汉字楷体字模集及数据集》
GB/T 13848—1992《图形信息交换用矢量汉字黑体字模集及数据集》

 注釋 

 参考文献 

 参见 
 同一时期的其他漢字編碼：大五碼、中文標準交換碼、中文資訊交換碼、香港增補字符集、JIS X 0208
 統一碼、通用字符集（ISO/IEC 10646）
 中日韓統一表意文字
 GB/T 12345

 外部链接 
GB2312 80信息交换用汉字编码字符集 基本集 - 中华人民共和国教育部政府门户网站
 TransWiki中文 - GB2312汉字拼音对照表
 GB2312 简体中文编码表
 信息交换用汉字编码字符集属性（官方）
 GB 2312-80 (CJKV Information Processing,Appendix E) "STSong-Light" font designed by Changzhou SinoType Technology 
 図書館員のコンピュータ基礎講座：GB 2312-80コード表

Category:中文信息处理
GB 02312
2312