2.8. 中文字符编码标准

2.8.1. GB2312,CP936,GBK,GB18030,GB13000

2.8.1.1. GB2312

1980年,中国制定了GB2312-80,一共收录了 7445 个字符,包括 6763 个汉字和 682 个其它符号。

GB2312-80,简称为GB2312。

在 Windows 中的代码页(Code Page)是 CP936。

2.8.1.2. GB13000

1993年,国际标准Unicode 1.1版本推出,收录中国大陆、台湾、日本及韩国通用字符集的汉字,总共有20,902个。

中国大陆订定了等同于Unicode 1.1版本的“GB 13000.1-93”,简称为GB13000。

GB13000,显然包含的GB2312已有的文字和其他很多为包含的文字,如GB 2312-80推出以后才简化的汉字(如“啰”),部分人名用字(如中国前总理朱镕基的“镕”字),台湾及香港使用的繁体字,日语及朝鲜语汉字等。

2.8.1.3. GBK

微软,对GB2312-80的扩展,即利用GB 2312-80未使用的编码空间,收录所有的GB 13000.1-93和Unicode 1.1之中的汉字全部字符,制定了GBK编码。

GBK 收录了 21886 个符号,它分为汉字区和图形符号区。汉字区包括 21003 个字符。

GBK 作为对 GB2312 的扩展,在现在的 Windows 系统中仍然使用代码页 CP936 表示,但是同样的 936 的代码页跟一开始的 936 的代码页只支持 GB2312 编码不同,现在的 936 代码页支持 GBK 的编码,GBK 同时也向下兼容GB2312 编码。

所以,技术编码上,GBK兼容旧的GB2312,但是编码方式和GB13000不同,不兼容GB13000,但是所包含文字上,算是和GB13000相同。

2.8.1.4. GB18030

GBK自身并非国家标准,只是曾由国家技术监督局标准化司、电子工业部科技与质量监督司公布为“技术规范指导性文件”。

原始GB13000一直未被业界采用,2000年,国家出了标准GB18030-2000,简称GB18030,技术上兼容GBK而非GB13000,取代了 GBK1.0,成了正式的国家标准。

该标准收录了 27484 个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。

现在的PC平台必须支持 GB18030 ,对嵌入式产品暂不作要求。所以手机、MP3 一般只支持 GB2312。

GB18030 在 Windows 中的代码页是 CP54936。

这么多汉字编码标准的关系,总结起来就是第 2.8.2 节 “各种中文字符编码标准的关系”中所介绍的。

2.8.2. 各种中文字符编码标准的关系

( 中国大陆的标准)GB 13000.1-93

=(国际标准)Unicode 1.1

(中国大陆标准)GB2312-80

= 简称GB2312

= Windows系统中的原先的CP936

(微软制定的)GBK

= (微软在编码方面)对 GB2312 的扩展

= (微软在所包含字符方面上包含了)GB 13000.1-93 + 其他部分汉字+ 台湾和香港的繁体 + 日语 + 朝鲜汉字

= Unicode 1.1 + 其他部分汉字+ 台湾和香港的繁体 + 日语 + 朝鲜汉字

对于GBK

  • 在编码方面:向下兼容GB2312,但是和GB 13000不同
  • 在内容方面:等价于GB13000

微软中现在的新的CP936

= GBK

=兼容旧的GB2312

在技术编码方面上,演化顺序为:

ASCII ⇒ GB2312 ⇒ GBK ⇒ GB18030

后者对之前的,都是支持之前的编码,即向下兼容,即同一个字符,在这些编码中,都是同样的值,后面的标准,支持更多的字符。

区分中文编码的方法是高字节的最高位不为 0。

按照程序员的称呼,GB2312、GBK 到 GB18030 都属于双字节字符集 (DBCS)

表 2.5. 中文字符相关编码标准

编码标准 别名 标准所属 包含字符
ASCII   国际通用  
GB2312 微软Windows中以前的CP936 中国大陆 6763 个汉字和 682 个其它符号
Unicode 1.1   国际通用 20,902个字符
GB13000   中国大陆 20,902个字符
GBK 微软Windows中现在的CP936 微软 21886 个符号
GB18030 微软Windows中的CP54936 中国大陆 27484 个汉字+其他少数民族字符