中文字符集和中文编码 阿四的日志 下载本文

内容发布更新时间 : 2024/12/26 21:23:32星期一 下面是文章的全部内容请认真阅读。

中文字符集和中文编码 阿四的日志

中文字符集和中文编码

Posted on 八月 10, 2011 by ashi 编码(encoding)指的是把某种信息表示成某种形式的过程。像我们的语言就是一种编码过程,把信息化成文字,声音等语言要素的过程。这里所谈到的编码是指把语言变成计算机可以识别的信息的过程。这个过程纷繁复杂,再加上中文字符本身的特点(比英语字符表示上要复杂),发展出来了许多标准,如果没有一个较好的模型(简单说就是一个分层次的概念),很容易把人搞头大。比如说光看wikipedia上对

GB2312,GBK,GB18030,Big5,USC,Unicode,EUC,EUC-CN,EUC-TW,CP936,CP950,UTF-8,UTF-16,UCS-4,UCS-2等等的名词解释,很难清晰的看到他们之间的关系,也就很难理解这个编码问题。分层的概念

上面说了这个所谓的编码(encoding)是指把语言变成计算机可以识别的信息的过程。如果把这里的语言简化成所有的中文字,把计算机可以识别的信息简化成2进制数字。那编码就是找一个把中文字映射成2进制数字的映射的过程。当然

实际上这个过程还是要繁杂一些,下文中我想结合中文编码详细说说我的理解,不当之处见谅。

首先介绍一个分层模型,这个模型在文献Whistler and Davis (2000) 和 Dürst et al (2001)中有详细的说明。原来的模型有5个层次,我觉得取其中的三个层次作介绍就足够我们理解编码了。这三个层次分别为:一、抽象字符集(Abstract character repertoire ),简称ACR,二、编码后的字符集(Coded character set),简称CCS,二、字符编码形式(Character encoding form),简称CEF。这个翻译肯定不够恰当,大家尽量以原文 的意思去理解它。

ACR是就是指一些字符的集合,里边的字符也没有排序,通俗的说,所有简体中文字符就是一个ACR,所有英文字符也是一个ACR,ACR与GB2312之类的名词之间没有对应,这儿提到只是帮助理解。CCS是指某个ACR经过处理编排后的字符集合,它是有规律的(排序的),像ASCII码表,中文的区位码表。例如GB2312标准就是定义了这样一个CCS,它里边的中文字符有自己的对应的称为码点(codepoint)的东西和它对应,Codepoin是一个整数。比如中文字“啊”的区位码(准确地说是GB2312的区位码)是整数\,这里的1601就是一个codepoint。而ASCII码表

里大写字母A的codepoint就是对应的整数十六进制的0×41。

CEF可以理解为把codepoint映射为码元(code unit)的一种方法。code unit就是计算机所能读懂的信息(2进制码),通常它的长度就是字节(8-bit)的整数倍。比如EUC-CN就是一种CEF,它把GB2312中的codepoint映射成为2进制码。比如它把GB2312中的中文字“啊”的codepoint\映射成\。

有了这个分层概念,对理解编码就很有用了。简体中文字符集和编码

现在就可以介绍中文编码标准,比较有名的是GB2312,确切的说是GB2312-80,GB是“国标”的缩写,80指1980年。这个标准中涉及了CCS,但是并没有涉及到CEF。就是说它只是一个有序的字符集(实际上就是GB2312那张区位码表,它收录了6763个汉字),没有定义它是如何编码的。通常GB2312由EUC-CN来编码(下文会说到EUC-CN),另外GB2312也可以由HZ等编码方式编码。因此一个字符集