QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1310|回复: 2

Linux中文化内幕(转贴)

[复制链接]
发表于 2002-10-8 13:04:04 | 显示全部楼层 |阅读模式
Linux中文化内幕
作者: 张其刚  评价:  上站日期: 2002-07-30  
内容说明:  
来源: 开放系统世界  

--------------------------------------------------------------------------------


概要:Linux诞生之时,并没有考虑到诸如中文、日文、韩文等语种的用户。曾经在一段时间里,处理多字节编码(多字节编码会在后面介绍)的语言非常不方便。现在处理这些语系已经非常方便。作为中文用户,已经有诸多的中文Linux发行版本可供选择,诸如Turbo Linux、BluePoint Linux、Xteam Linux、RedFlag Linux等。但是还是有许多读者使用国外的发行版本,使这些版本支持中文处理已经是非常容易的事情,在网上可以说轻松就可以找到关于这方面的文章,但是能做到知其然且知其所以然不是更好么?

1.语系与编码

众所周知,计算机处理的信息都是二进制的编码表示的,文字也不例外。文字的表示都是不同的数值,具体的哪一个对应于那个具体的文字,这些都是由编码决定的。编码中还有单字节编码于多字节编码之分。对于大部分的西文用户,256个数值就足够表示不同的字符,也就是一个字节。典型的就是ASCII编码。而对于像中文、日文、韩文等语言,这样的语言,256是根本不够的。为了解决这个矛盾,国际标准化组织把编码增加到了16位,即多字节编码,这样就可以处理65536个字符。基本上可以囊括世界上主流语言的常用字符了。在这65536的编码范围中又分成了几个区,分给不同的语言使用,这就是unicode编码。由于unicode编码的出现比较晚,在此之前,各个多字节编码的国家已经颁布了自己的编码方式,如中文的GB2312编码。为了兼容起见,这些编码仍旧在使用之中。

2.汉字的显示

汉字显示出在屏幕上的原理是比较复杂的,我当然不会在这里说到底CRT和LCD显示有什么不同,简单的说,汉字(或者其他的字符)是“画”在屏幕上的,通常,我们为了显示汉字,都要提供字体。最简单的字体是位图字体,或者称点阵字体。一般我们说多少点阵的字体就是指汉字的大小站多少点阵,一个点阵就是逻辑上这个字占多大的逻辑空间,如果是16x16点阵的字体,则每个字就占用256个逻辑点的方阵。点阵中为1的是需要化的点,反之,为0的点为不需要化的点。举一个简单的例子,拿汉字中的“一”字为例,把需要画的用一个二进制位的1来表示,不需要画的用0来表示。可能这个“一”字在某个字体文件中是这样表示的:


0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0111111111111110
0111111111111110
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000
0000000000000000



把每个逻辑点用一个二进制位表示,这个字体中的“一”字就用了32个字节。然后系统就可以照虎画猫了。通常你看到的字体文件不是每个字符一副位图,而是所有的字符存储在一个文件里面,把编码信息作为寻找字符的位置信息,根据编码和字体的描述信息,主要是字体的大小,系统就可以轻松找到字体文件中某个字符的位图,画在屏幕上,就是我们看到的汉字的样式了。由此我们就可以想像到,如果编码不正确,这个位置信息就是错误的,根据这个编码值找到字符画在屏幕上所表示的信息也就毫无意义,这就是通常我们所说的乱码。我们可以看一下Linux中字体文件的信息来看一下:例如Redhat7。2中:/usr/X11R6/lib/X11/fonts/misc/fonts。dir中的仿宋字字体的描述信息:

gb16fs.pcf-isas-fangsongti-medium-r-normal--16-160-72-72-c-160-gb2312.1980-0~~~~~~~~~~~~~~~~

3.字体文件名称大小

由于位图字体比较浪费空间,一般情况下都要进行压缩,我们常见的pcf格式,bdf格式都可以进行压缩。由于点阵字体都是对应于某一个特定大小的字体,所以如果哪这种大小的字体来显示其他型号的字体的话,效果非常差,因为位图在放缩操作中的失真是很大的,于是产生了另外一种轮廓字体,即TrueType字体,也叫矢量字体。

这种字体的描述方式不是使用位图方式来表示的,而是使用了一种样条算法来描述的,在需要使用这种字体的时候,需要一个中间模块来把轮廓字体转化成实时转化成相应大小的位图字体来显示而不会失真。这中中间模块一般是FreeType,原来在X Window中也是使用这个模块来处理轮廓字体,现在在XFree864。x版本中增加了xtt模块,这个模块跟FreeType不能同时使用。如果想在X Windows中使用TrueType字体,需要使用xtt模块,典型的在

RedHat7。2中的XFree86的配置文件/etc/X11/XF86Config-4中的“Module”段中加入Load“xtt”。

4.本地化信息

一个语系除了文字的不同之外,还有许多其他的不同的方面,如:日期显示格式等。这些东西这些都已经成为标准,一般设置LC_ALL变量即可,你可以用locale命令显示所有的本地化信息变量。根据这些变量的值,系统去自动寻找/usr/lib/locale目录下相应的目录中的定义的这些变量的具体信息,如自动设置了本地化信息为zh_CN,则系统会使用/usr/lib/locale/zh_CN目录下的详细信息来进行本地化处理,或者自动加载根据应用程序的分离出来的信息翻译成的相应的语言的mo文件成为不同语言版本的应用程序。典型的就是KDE可以支持34种不同的语言界面。

5.X Window汉化

在整个Linux的底层支撑库libc中,包含了关于多字节编码字符以及本地化信息处理的函数,根据系统设置的本地化信息,X Window加载不同的编码转换模块,来进行编码处理,从而可以正确显示中文。但是对于中文的输入,使用的是XIM协议,即X输入协议。我们当然不能为每个汉字在键盘上安一个相应的键,除了老式的打印机是那样的,所以我们用很多键的组合来表示一个汉字的输入,具体怎样组合,就是输入发的码表的问题了,比如拼音,就是用不同的拼音来表示的,五笔字型是用了另外一种组合模型。而且不同的语言的输入还是不一样的,XIM就引入了一个这样的“中间层”,XIM也是用一个服务器提供从键盘组合到编码的翻译的服务。X Window在接受键盘输入的时候,先检查系统环境变量XMODIFIERS是否设置,XMODIFIERS是大家约定好的一个变量名称,而且这个变量的值就是输入服务器同应用程序的通讯的“暗语”。X服务器通过它来看输入服务器是否启动。如果启动,就先把键盘的输入教给输入服务器来处理成相应的字符集的编码,否则直接根据键盘影射文件中映射成西文的字符。不同的输入法程序的“暗语”是不同的,如大家常用的chinput系列就是Chinput,xcin的简体中文输入为xcin-zh_CN。GB2312。

6.控制台汉化

由于控制台的驱动的关系,汉字字体是没有办法直接“画”在屏幕上,所以要在控制台上处理汉字要先进入一种“微型”的图形模式。常用的就是framebuffer和vga模式。现在决大多数控制台上的汉字终端都是使用了这两种方式中的一种,先进入图形模式,再进行汉字显示。对于输入,则是提供了自己的输入服务器罢了。

由上可见,汉化一个Linux系统并不是什么深奥的事情,一个比较新的英文发行版,几分钟就搞定了。无非是装中文字体,修改本地化信息环境变量,安装输入法,这样的“八股文”。其实在中文化中比较困难的一个工作应该是中文打印,现在的中文打印,笔者还没有搞定过(主要是我可没有打印机)。中文打印做的最好的应该是Turbo Linux,当然Turbo的中文化也是非常出色的,如果你非常“懒”的话,干脆用Turbo Linux好了。
 楼主| 发表于 2002-10-8 13:22:08 | 显示全部楼层

想法

最近一直想给我的redhat7.2配置成支持中文的环境;)
我的redhat在安装的时候是选择的英文环境,所以想看看怎么从头到尾的去让我的redhat支持中文,看了公社很多文章 有一篇是比较深刻地讲解了中文的支持
但我还是有点迷糊。。 最令我费解的就是 到底是什么东东让我的redhat支持了中文(我是指 显示了中文) 我安装了sum字体 让我的mozilla显示了中文
但我的桌面 我的QQ都不能 更不要说什么输入中文了(至少我想一样一样的弄明白) 虽然很多文章提到修改这个文件 修改那个文件 但真正说明他到底要为什么这么做的却很少(当然还是有几句简单的说明) 也许我觉得一个喜欢刨根问底的linux朋友,或者更适合有想自己写一个中文支持的人(程序员) 远远不够
我对中文支持的了解还很少 但我看了到这篇文章 感觉很不错 也许我觉得要有个收集地 让大家更方便更快捷的找到需要的信息 所以我贴了出来 希望有人需要;)
回复

使用道具 举报

发表于 2002-10-8 14:04:33 | 显示全部楼层
确实不错!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-25 13:49 , Processed in 0.073035 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表