当前位置:Linux教程 - Linux - 构筑稳健的中文Linux(上)

构筑稳健的中文Linux(上)

Linux是操作系统中的一朵奇葩,是中国软件发展的机遇。要使这朵奇葩在中国的大地上生根、发芽、开花,要想抓住Linux机遇,首先必须解决中文本地化的问题。

  1999年政府公开支持在中国发展Linux,国内出现了好几家制作中文Linux发布版本的公司,推动了Linux在中国的发展和普及,但在初期中文Linux都是采用中文平台的方式。

一、“中文平台”
  “中文平台”是为了让计算机能处理中文信息,在操作系统上建立必要的中文处理手段,即在ASCII码的操作系统上架构一个中文处理环境,用来提供中文的输入、显示、打印和中文文件的存储、处理、传输,并为应用软件开发和运行提供支持,俗称“中文平台”。

  中文平台的主要技术特点是在ASCII码的操作系统上架构一个中文处理环境。该中文处理环境为了简化字符处理而使用的处理码可能是把汉字作为一个宽字符来处理,但进出核心的代码流都采用文件码,即多字节字符,所以中文平台本质上仍是按字节处理中文。

  从显示方式来讲,可分为字符界面和图形界面两种“中文化”方式。字符界面的“中文化”又可分为内核汉化和外挂式两种。内核汉化是直接修改Linux内核的源程序,使之能处理中文信息。外挂式是不修改Linux内核的源程序,在原有应用程序接口(API)之外增加一层中文信息处理的支撑平台。

  图形界面的“中文化”本质上都属外挂式,但实现的方式有:

  修改XFree 86、即修改X Server;

  修改XWindow的库函数Lib X11.so;

  利用LD-PRELOAD载入动态库。

  中文平台具体实现的技术特点各不相同,充分展现了中国人的聪明才智,但也带来一些问题。

  1. 没有相应的标准,使中文应用软件在多版本之间的可移植性造成困难。有可能出现在某一版本中文平台上运行的中文应用软件在另一个版本的中文平台就不能运行或不能很好运行的情况。中文应用软件开发商可能要为每一个版本的中文平台开发一个产品。这对中文应用程序的发展很不利,而应用又是Linux能否发展的一个极重要的问题。

  2.中文平台实际上仍是字节处理,而不是以字符为单位来处理,可能与ASCII码造成冲突,不能彻底解决汉字与ASCII码的冲突。而且不能彻底解决汉字的输入、输出问题,比如半个汉字的问题(显示、删除半个汉字,光标半个汉字移动)。

  3.中国是由56个民族组成的大家庭。中国使用汉字的人占绝大多数,中文主要是汉语,但也包括其他少数民族的语言文字。海内外华人使用的汉字有简体与繁体,日本语、朝鲜语中也有汉字。“中文平台”和“中文化”是个很不确切的说法。而且中文平台也解决不了在一个系统内使用汉字、少数民族语言、日本和朝鲜的汉字问题。

  4.POSIX是操作系统的一个标准。 Linux是符合POSIX标准的。而POSIX标准是采用国际化/本地化模式来解决多国语言文字的本地化。

  1999年8月底成立了Linux国际化工作组,开始了Linux国际化(缩写为Li18nux)工作,同时也为中文本地化指出了正确道路。在这之前搞中文平台,是因为那时还没有Linux国际化组织,也没有Linux国际化标准。而且Linux是芬兰人发明,在美国成长起来的,开始也没有想到它会如此成功,会走向世界,因此Linux以前也没有考虑国际化的问题。Linux中文平台对Linux在中国的发展和普及起了重要的作用,但它已完成了它的历史使命。它只是一种暂时过渡的方法,是不得已而为之的方法,并不是中文Linux发展的正确之路。

二、Linux的国际化/本地化
  国际化

  国际化(Internationalization,缩写为I18n,即取首尾两个字母,中间有18个字母)是规定在一个计算机程序内部的能力,使它适应不同的本地语言、本地风俗和编码字符集。

  国际化标准定义一组国际化的应用程序编程界面和用户界面。

  国际化主要包括用双字节/多字节编码代替单字节7位或8位编码,使用统一的大字符集ISO 10646,建立本地化数据库Locale DB,提供输入、输出服务(I/O服务)等内容。

  1. 用双字节/多字节编码代替单字节7位或8位编码

  在国际化标准中,系统字处理中,必须以字符为单位,而不能以字节为单位。字符既可以是单字节字符,也可以是多字节字符,所以彻底解决了半个汉字现象。

  由于历史的原因,计算机为了实现不同硬件和软件系统之间数据传输的标准化,是使用7位编码的,称为ASCII(American standard code for information interchange)。ASCII是信息交换使用的美国国家标准编码,它是美国的标准。ASCII字符集是用7个数据位表示的代码,它用二进制数值来表示ASCII字符,代码值的范围在0到127之间。大部分基于PC的系统则使用八个数据位的扩展ASCII代码。这样可以使用额外的128个字符代表一些特殊符号、外语字符、图形符号。

  通信软件的高位(第8位)是作为奇偶校验位,用来检测和改正通信错误。这种7位有效位的假定,渗透到很多软件中,如电子邮件的实现。

  随着计算机应用的不断发展,7位编码已不够了。虽然以后又使用8位的扩展ASCII码,但256个字符即使对使用拼音文字的单文种的国家的用户也是不敷使用了。虽然用了7位或8位能覆盖基本字母,但还有多种多样的符号及印刷元素,其数量远大于256。各国拼音文字的字母和各种符号就有一万个左右,汉字则有七八万之多,使用双字节(16位)编码,也只能标识65536个符号。所以,如果想要计算机能使用多国文字,特别是使用汉字,则必须用双字节/多字节。

  如果说用两位数表示年是计算机的千年虫问题,那么用单字节编码ASCII处理字符则是计算机文字处理的“千年虫”问题。但单字节编码的危害还没有引起人们足够的重视。

  国际化的首要工作就是在系统字处理中,必须以字符为单位,而不是以字节为单位,即用双字节/多字节编码代替原来的单字节编码,这就是用宽字符(wide character,为了统一地处理单字节字符和多字节字符,而采用统一编码宽度的字符的内部表示)代替单字节字符。

  2.使用统一的大字符集ISO 10646

  使用统一的多八位大字符集ISO 10646是国际化的关键工作,也是国际化的核心工作。十分遗憾的是很多人对其重要性认识不足。

  中国56个民族中使用汉字的人占绝大多数,有本民族语言的少数民族有17个。这些民族的文字属性及字量相差很大,目前对不同民族文字采用不同的编码方式。在中国使用人数最多的少数民族文字有七种:蒙古文、藏文、维吾尔文、哈萨克文、朝鲜文、彝文和壮文。其中蒙古文、哈萨克文、朝鲜文还须考虑和使用这些文字的其它国家如蒙古国、哈萨克斯坦共和国、朝鲜和韩国使用的编码一致。中文信息处理主要是汉字,但不只是汉字。它也应该而且必须包括少数民族语言的文字处理这一重要组成部分。这对加强民族团结、提高少数民族地区的经济、文化、科技发展,对于回击外国反华势力攻击中国不重视少数民族的谎言,都有十分重要的意义。为了在一个计算机系统内同时处理汉字和多种少数民族文字,就必须使用既有汉字、又有各少数民族文字的统一大字符集。

  海内外华人使用的汉字有很大差异,这种差异不只是反映在简繁体和用词的不同,更重要的是编码和字符集不同,而要解决这个问题必须采用统一的大字符集。而且,国际化的要求也使得大字符集的使用更为迫切。

  ISO 10646 信息技术通用多八位编码字符集(Information technology-Universal Multiple-

  octet Coded Character Set,缩写为UCS)是国际标准化组织对全世界各国地区使用的书面语言文字及符号进行统一编码的编码字符集的国际标准。已于1993年5月正式审定公布了ISO 10646.1。我国根据等同采用国际标准的原则,也于1993年12月宣布为国家标准GB13000.1。

  目前,该标准已收入了各国现行标准的文字符号近六万个,可用于世界上多种语言的书面形式及附加符号的表示、输入、显示、存储、处理、交换和传输。其中中文简繁体汉字、日文用汉字、朝鲜文用汉字(简称CJK汉字)共20902个。

  ISO 10646标准颁布后,又经历了一系列的修改与扩充。经过中、日、韩等国的不懈努力,目前CJK汉字扩充集的6582个汉字、彝文和汉字结构符、汉字部首与构件编码已纳入BMP,蒙文和藏文编码也取得重要进展。目前正在制定辅助平面(可收入汉字的标准,辅助平面2将纳入CJK汉字扩充集Extension B的四万多汉字及Super CJK的六万多汉字。

  其实,使用ISO 10646,中国是最大的受益国。但奇怪的是国外的公司为了软件的国际化对ISO 10646十分积极,而我国的部分企业却不重视。

  但是国际化标准的制定进展太慢,可能是对“地方”的积极性没有发挥或发挥不够。特别是UCS中最大量、最困难的工作是汉字部分。在制定UCS标准时应充分重视中国的意见,并充分发挥中国的积极性。

  在处理汉字字符集方面,考虑语言中的内在关系,哪些字是常用、次常用,如何排序(按汉语拼音、笔划、部首),如何寻求最佳方案等,最有研究、最有发言权的自然是中国人。当然,海外华人和日本、朝鲜、韩国也都使用汉字,他们对汉字字符也很有研究,也要充分考虑他们的意见,但最大的用户和市场是在中国。

  国际化标准组织在汉字字符集中应以中国的意见为重,另外如IBM、SUN等大公司对汉字本地化也有很多研究,对国际化做出很大贡献,也应多和他们协商。

  每个国家执行的是本国的国家标准,国际标准只有变为国家标准时才能被该国执行。国际标准是通过多国的国家标准来实现的。

  国际化与本地化是一个辨证的关系。国际化是为了解决软件能在各个使用不同语言、不同风俗的国家和地区的编码字符集都能使用的问题,而对计算机程序作出的某些规定。简言之,国际化正是为了解决本地化。另一方面,本地化是国际化向特定本地语言环境的转换,本地化要适应国际化的规定。

  国际化标准组织要充分尊重各国标准化组织的意见。汉字共有七八万个,从码位的占有率来看是绝大多数,而且汉字又有简体、繁体、日文用汉字、朝鲜文用汉字、韩国用汉字,可谓是最复杂的。国际化工作中最大量、最复杂的工作就是解决汉字本地化的问题,如果汉字本地化解决好了,国际化的工作就完成了一大半。汉字本地化解决得好坏是衡量国际化工作好坏的试金石。全世界使用汉字的人最多,汉字又是联合国使用的文字,解决好汉字本地化意义十分重大。国际化标准组织应该格外重视中国标准化组织的意见,而不只是听取各中文Linux厂商的意见。现在国际化组织的成果虽然已上网,但与中国标准化组织机构并未建立直接、畅通,有效的联系渠道。

  而且对中文(汉字)最了解的还是中国人自己。中文本地化离开中国人是搞不好的,国际化离开中国人也是搞不好的。

  另一方面,中国的标准化组织也应主动和Linux国际化组织取得联系,反映自己的意见,有问题和Linux国际化组织协商解决。

  制定标准首先应考虑促进技术的发展,有利于整个行业的发展,而不仅仅是保护国内厂家的利益。事实证明单靠制定GB是挡不住国外大公司的。

  经济全球化,软件国际化是趋势,Linux也正走向全球,走向国际化。

  全球有四分之一的人使用中文,没有中国的“全球化”是不可想象的,所以Linux需要中国,而中国也需要Linux。解决好Linux的国际化和中文本地化对Linux的发展、对中国软件行业都是十分重要的事,意义是十分深远的。我们应抓住Linux机遇,从Linux的国际化和中文本地化突破,把软件行业的国际化/中文本地化来一个比较彻底地解决。

  这里有一个很重要的问题是对Unicode怎么看待和对关于字符集的国家标准(GB)如何与国际接轨而又充分体现对中文本地化最有利?

  Unicode现在也是国际标准了,而不再只是几家美国公司自己提的方案了。现在微软的产品已支持Unicode ,还有SUN、IBM等大公司都支持Unicode 。

  汉字不只是中国人民的宝贵文化遗产,也是亚洲人民的宝贵遗产,而且也是世界文明的共同财富。汉字在很多方面是优于拼音文字的。如汉字能使人引起联想,而联想是一切发明之母,学习和使用汉字有利于大脑智力的开发;使用汉字能以最小的篇幅表达最多的内容;汉字具有美感等。

  我国既然决定了要遵循国际化标准ISO 10646并发布了相应的GB13000标准。共收录了七八万个汉字。是尽快过渡到UCS国际标准呢,还是缓慢过渡到UCS国际标准?我看还是尽快过渡好。因为多一个过渡性的GB,就会多一批需转换的大量文件,也就是多一个大包袱。而且BMP已收录了两万七千多个汉字,能满足绝大多数人的使用。

  应尽快采用国际标准的字符集和编码方法,以后就只需逐渐补充字型(font)就行了。

  关于字符集的标准,有关部门应把重点放在与国际标准有关组织建立联系,把对汉字字符集、少数民族文字字符集和编码的有关意见和他们沟通、协商,争取在国际标准上反映出来。不要再搞新的字符集的GB了,以减少以后向国际化标准转换时的包袱。

  标准制定的重点应放在应用程序界面(API)的规范、标准的制定上。制定标准的一个重要作用就是促进应用程序的开发。十分遗憾的是这项工作进展太缓慢了。为了加快进度,最近中科院软件所、红旗软件公司和一些关心API标准的人正在草拟一个标准初稿,准备供大家讨论、修改,以尽快拿出一个草稿供标准化组织讨论。

  (未完待续)