有关计算机汉字编码的一些国家标准
有关计算机汉字编码方案,Unicode 系列的资料相对清晰一些,Unicode、UCS、UTF 这些概念,看看 Wikipedia 是容易弄明白的。当然,其中也有复杂的版本演进问题以及 Unicode 与 ISO 10646 标准的微妙差异。而我国的 GB 系列汉字编码标准,网上的资料相对零散,故我通过 Wikipedia 的相关页面收集了一些信息,加以整理和注释,希望对大家有所帮助。如有差错敬请指出。
更新于 2009-05-26。
一、现行计算机系统中使用的 GB 字符集与编码
现行计算机系统中使用的 GB 编码是指 GB 2312-80 —— GBK —— GB 18030-2000/2005 这一系列。标准文件中定义了编码(区位)的方案,并且有计算机中实现的规范(内码,EUC-CN)。
● GB 2312-80 信息交换用汉字编码字符集·基本集(又称 GB0)
包含常用的一级汉字、二级汉字、符号等。每个汉字以双字节表示,高位字节使用0xA1-0xF7(0xA1-0xA9是符号,0xAA-0xAF保留,0xB0-0xF7是汉字),低位字节使用0xA1-0xFE。
● GBK 汉字扩展内码规范
在 GB 2312-80 基础上增加了来自 GB 13000.1-93 等标准中的一些罕用字与繁体字。为容纳新字,扩大了编码范围,高位字节使用0x81-0xFE,低位字节使用了0x40-0x7E及0x80-0xFE,新字填补在与 GB 2312-80 汉字无冲突的空位。
注意,GBK 并非国家标准。它最初是微软对 GB 2312-80 做的扩展。鉴于其使用的普遍性,国家技术监督局标准化司、电子工业部科技与质量监督司于1995年12月将其作为技术规范指导性文件发布。
● GB 18030-2000 信息交换用汉字编码字符集·基本集的扩充
向下基本兼容 GBK,补全了 ISO 10646.1:2000 中的 CJK 统一汉字(Main、Extension A)。为容纳新字,在保留原有双字节编码的同时引入了四字节编码,第一字节使用0x81-0xFE,第二字节使用0x30-0x39,第三字节使用0x81-0xFE,第四字节使用0x30-0x39。
● GB 18030-2005 中文编码字符集
在 GB 18030-2000 的基础上,补全了 ISO 10646.1:2003 中的 CJK 统一汉字(Extension B)。编码空间同上。其中双字节编码部分是现行的强制性国家标准。
二、现行计算机系统中未作为汉字编码的字符集
● GB/T 12345-90 信息交换用汉字编码字符集·第一辅助集(又称 GB1)
GB 2312-80 的繁体版,区位安排与 GB 2312-80 一致,但替换为繁体字。同时增加了一些竖排标点符号。
● GB/T 7589-87 信息交换用汉字编码字符集·第二辅助集(又称 GB2)
对 GB 2312-80 的增补,增加一些简体罕用字。每个汉字以双字节表示,高位字节使用0xA1-0xFE(0xA1-0xAF保留,0xB0-0xFE是汉字),低位字节使用0x21-0x7E。
● GB 13131-91 信息交换用汉字编码字符集·第三辅助集(又称 GB3)
GB/T 7589-87 的繁体版。
● GB/T 7590-87 信息交换用汉字编码字符集·第四辅助集(又称 GB4)
对 GB 2312-80 的增补,增加一些简体罕用字。每个汉字以双字节表示,高位字节使用0x21-0x7E(0x21-0x2F保留,0x30-0x7E是汉字),低位字节使用0xA1-0xFE。
● GB 13132-91 信息交换用汉字编码字符集·第五辅助集(又称 GB5)
GB/T 7590-87 的繁体版。
● GB/T 16500-1998 信息交换用汉字编码字符集·第七辅助集(又称 GE)
信息交换用汉字编码字符集基本集及其第一至第五辅助集中没有收录的,但在 GB 13000.1-93(ISO 10646-1:1993)中通过其它途径收录的汉字。
以上标准文件定义了一系列罕用字的编码和区位,但在主流计算机系统中没有实现(GB2、GB4 标准文件中使用的都是手写字体)。这些字最终被 ISO 10646-1:1993 和 GB 13000.1-93 标准化之后,由 GBK 重新引入,做了与 GB 2312-80 兼容的内码实现。其中 GB1、GB3、GB5 连同 GB0 作为提交给 ISO 制定 ISO 10646-1:1993 的依据的一部分;GB2、GB4 中不少是“类推简化汉字”,实用性不高,故没有被 ISO 采纳;第七辅助集是在 GB 13000.1-93(ISO 10646-1:1993) 制定之后,对“信息交换用汉字编码字符集”系列国标的完整性的补充。它之所以不简称为 GB7,是因为此前中国向 ISO 提交制定 ISO 10646-1:1993 的依据时,将1988年出版的《现代汉语通用字表》简称为 GB7 了。在 ISO 10646 后期修订时,GE 又被反向引用为标准依据之一。之所以不存在“第六辅助集”,我个人猜测的原因是:第六辅助集留作第七辅助集的“类推简化汉字”版本,没有实用意义。
备注:GBK 之前的这些标准中,{高[0xA1-0xFE]-低[0xA1-0xFE]}、{高[0xA1-0xFE]-低[0x21-0x7E]}、{高[0x21-0x7E]-低[0xA1-0xFE]}都安排了汉字,那么{高[0x21-0x7E]-低[0x21-0x7E]}是用来做什么的?参考 GB 12052-89《信息交换用朝鲜文字编码字符集》以及 GB 13134-91《信息交换用彝文编码字符集》等,它们用来安置一些少数民族文字(重叠,互不兼容)。GB 2311-90《七位和八位编码字符集代码扩充技术》规定了一系列方案使得它们不会和 7 位 ASCII 冲突。这些少数民族文字编码标准最终也没有被大规模采用,取而代之的也是 ISO 10646 以及等价的一些中文版标准(如 GB 16959-1997《信息交换用藏文编码字符集基本集》)。
三、ISO 10646 / Unicode 的中文等价标准
● GB 13000.1-93 通用多八位编码字符集(UCS) 第一部分:体系结构与基本多文种平面
相当于 ISO 10646-1:1993 中文版,基本等价于 Unicode 1.1。编码方式(Unicode / UCS)与内码实现方式(UTF)分离。目前这一标准并没有随 ISO 10646 或 Unicode 的更新而更新。
四、其它汉字编码标准
● GB 8565.2-88 信息处理文本通讯用编码字符集 第二部分(又称 GB8)
主要用于电讯,没有作为计算机汉字内码实现。它是提交给 ISO 制定 ISO 10646-1:1993 的依据的一部分。
最后说一点个人理解:GB 18030-2005 是目前阶段兼容遗留系统(更主要的是遗留文档)的权宜之计。尽管从技术角度说,它也是一种 UTF(基于码表映射而非简单的公式组合),但它毕竟在国际化环境中不能与其它语言编码共存,编码转换的空间开销大,有其局限性。ISO 10646 / Unicode 应该是国际化的大方向,我国相关技术人员也在也积极参与 ISO 10646 / Unicode 的修订,未来版本的 GB 13000 应该会向这个方向努力。




