|
发表于 2005-7-29 20:08:55
|
显示全部楼层
汉字编码的背景知识
源自:
http://www.freebsdchina.org/forum/viewtopic.php?t=8420&sid=d92bb20a30253ba9f28abec647d06f2d
本文是北京市科委组织的桌面Linux操作系统项目的专家组的专家孙卫先生在和我交流探讨的电子邮件中向我介绍的有关汉字编码的部分内容,经孙卫先生同意,允许我发表在我们的论坛里。再次向孙卫先生表示感谢!
原文节选如下:
中国文字的历史是5千年,根据我们现在在文献记载可以看见的大约是20万个各种各样的字.1949年,为了扫除文盲和普及文化,在50年代-60年代根据最常用的字进行了两个重要的规范,一个是对文字的读音进行拼音化标准,原来是四角号码和注音.另一个就是对1千多个常用字进行简化,加上常用的不能简化的字,推出了国家一级字库,大约是几千个字.这两项改革使得中国大部分人走上了脱盲的道路.在70年代上,计算机要使用汉字,标准和规范都是外国和台湾的,实际上主要是外国的.80年代开始,个人计算机大量在中国使用,国家规定了GB2312的标准,在CCDOS上开始使用.GB2312在字形上是采用的中国国家颁布的汉字字形,全部是有拼音的,但是在编码上,为了保证计算机上的使用,采用的是ISO2022的编码法则.对于当时,不同的国家,只有标准字符集和标准符号集在ISO2022中,不同国家的编码区域是完全一样的,但是在各自的文字区域是复用的,即,如果安装了GB2312就无法兼容安装日本的标准编码.在80年代末期和90年代初期,海峡两岸的交流越来越多,却出现了在计算机上文字互补兼容的问题,在90年代初期,制定了一个GBK的规范,就是在大陆的6763字后面,增加BIG5里面的15000汉字的部分.这个部分是字型与台湾的字型是一样的,但是编码仍然是ISO2022.同时80年代末期,国际上已经开始重视文化在计算机上的交流,提出了国际统一码的概念,就是在一个编码体系里面容下全世界的文字.针对这个倡议,世界各国组织了Unicode委员会,同时也制定了一个新的编码标准,就是ISO10646编码.由于90年代初期,认识的局限性,中国没有积极的参与这个活动,日本,韩国在第一个标准里面占据了大量的码位,后来成立了Super C.J.K小组进行协调,在这个标准里面,把大陆,台湾的字型都放在里面的话由中国人占据的码位是20902个,含了所有的GB2312,GBK,BIG5的字型字.90年代末期,中国政府在此基础上,对于部分字型进行了处理和规范,形成了GB13000.1的标准文件,字型略有不同,但是编码是采用ISO10646的编码体系.目前在大陆的微软系统用字是ISO10646的20902个汉字.Unicode和ISO10646在初期的理论基础是不同的,Unicode认为字符编码应该是变长的,而ISO10646却认为字符编码是定长的,并且用2字节码就可以把世界上所有的文字解决完.UTF-8,UTF-16,UTF32就是在Unicode的理论上形成的计算机信息格式编码.在ISO10646的前面几个版本,是可以用USC2,和UTF-8进行处理的.但是,在90年代末期,中国向Unicode委员会又提交了6千多个汉字,ISO10646的编码体系最大只能放65536个字符,无法满足东亚语言新提交的字符要求,所以ISO10646从3.0开始进行扩充,在原有编码基础上,对于还未用满的区域进行了扩充,拓展了一部分到4字节,这样ISO10646的编码空间从65536到了150万字符的容量.所以在后来的ISO10646标准都是采用了变长码的原则,完全与Unicode重合了.这样Unicode和ISO10646变成了等同的关系,目前已经到4.0了,一共有71000汉字.在4.0中一共是3个部分,基本级20902,扩充A6千多个,扩充B4万5千多个.回过来,在中国进行WTO谈判时,某些政府官员自己认为要反对文化入侵,对于外国进入中国的信息系统进行限制,在仓促之间推出了GB18030-2000,这个标准在ISO10646的基本集的20902字是用ISO2022进行编码的,对于扩充A的字是采用的四字节码.但是在计算机实现上,不能ISO2022和ISO10646混用,如何解决了?微软就在表现层是GB18030-2000的,在底层是ISO10646的,用UTF-8处理.所有的多国语言问题都是这样处理啦.目前在Unix和Linux的处理是,把6千多个4字节变换成2字节,在表现层和底层都用ISO2022的标准.新的Linux的内核和X-Windows都支持Unicode的,所以,我们计划在新的计划中,变成和微软一样的处理方法,使得底层是统一编码的,表现层是可以多编码转换的关系.因为扩充B的4万5千多字无法转换成2字节编码啦(65536限制),所以今年将发布的GB18030-2003的新的和扩充B等同的部分使得Linux和Unix将付出新的代价.建议FreeBSD处理时最好采用和微软公司一样的方法.一次解决后,只需做翻译码表,而不需要动底层了.当时我是国家图书馆的总工程师向信息产业部质疑为什么GB18030-2000是强制性的,如何解决多国语言问题?如何参加国际交流?现在教育部语言文字委员会开始研究ISO10646/Unicode/GB13000的问题,因为康熙字典有52000字,大约有4000多个在V4.0中,中华大字典有5万多个字都在V4.0中,2004年开始的第二代身份证也采用的是71000汉字体系,所以Unicode 4.0和ISO10646标准将成为最简单的处理中文信息并与国际接轨的方式.GB13000就是与ISO10646全兼容的标准,也从未废止过. |
|