GB 2312

GB 2312 或 GB 2312–80 是中华人民共和国国家标准简体中文字符集，全称《信息交换用汉字编码字符集·基本集》，通常简称GB，又称GB0，由中国国家标准总局发布，1981年5月1日实施。GB 2312编码通行于中国大陆；新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB 2312。

概述

GB 2312标准共收录6763个汉字，其中一级汉字3755个，二级汉字3008个；同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个字符。
GB 2312的出现，基本满足了汉字的计算机处理需要，它所收录的汉字已经覆盖中国大陆99.75%的使用频率。但对于人名、古汉语等方面出现的罕用字和繁体字，GB 2312不能处理，因此后来GBK及GB 18030汉字字符集相继出现以解决这些问题。

国标码（交换码）

为了避开ASCII字符中的CR0不可显示字符（十六进制为0 ~ 1F，十进制为0 ~ 31）及空格字符0010 0000（十六进制为20，十进制为32），国标码（又称为交换码）规定表示汉字双字节编码范围为十六进制为（21，21） ~ （7E，7E），十进制为（33，33） ~ （126，126） 。因此，须将“区码”和“位码”分别加上32（十六进制为20H），作为国标码。以避免与ASCII字符中0~32的不可显示字符和空格字符相冲突。
例如： “万”字的国标码十进制为：（45+32，82+32） = （77，114），十六进制为：（4D，72H）。

内码（机内码）

国标码和通用的ASCII码冲突。把国标码中的每个字节的最高位都从0换成1，即相当于每个字节都再加上128（十六进制为80，即80H；二进制为1000 0000），从而得到国标码的“机内码”表示，简称“内码”。

字节结构

在使用GB 2312的程序通常采用EUC储存方法，以便兼容于ASCII。这种格式称为EUC-CN。浏览器编码表上的“GB2312”就是指这种表示法。
每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”，第二个字节称为“低位字节”。
“高位字节”使用了0xA1–0xF7（把01–87区的区号加上0xA0），“低位字节”使用了0xA1–0xFE（把01–94加上0xA0）。
由于一级汉字从16区起始，汉字区的“高位字节”的范围是0xB0–0xF7，“低位字节”的范围是0xA1–0xFE，占用的码位是72*94=6768。其中有5个空位是D7FA–D7FE。
例如“啊”字在大多数程序中，会以两个字节，0xB0（第一个字节）0xA1（第二个字节）储存。（与区位码对比：0xB0=0xA0+16,0xA1=0xA0+1）。