Next Previous Contents

2. 在 Linux 上使用中文的困难

本节试图将在 Linux 上使用中文可能遭遇的困难,做一通盘的描述。如此当你遇到问题时,可能比较容易找出关键所在。其实这里描述的困难也不仅仅出现在 Linux 上,许多也同时出现在其它系统,甚至整个电脑使用环境上。 如果你没有兴趣或真的很著急的话,就直接跳到 显示及输入中文 那节吧!

我们知道中文字在电脑上是由两个位元组(two bytes)所编码组成的。最常见的编码方式有台湾地区所通行的 big5 编码,及大陆地区所使用的 GB 编码。 而且开头的位元组几乎都是大於 128 的数值,也就是所谓 non-ASCII 码的□围(ASCII 是指小於 128 的编码)。

好的! 那又怎麽样呢? 问题就在这! 许多程式由於各式各样的原因,并未考虑到输入的资料可能是 non-ASCII 码的问题。 它往往假设了它所要处理的资料都是 ASCII 码,更糟糕的是,当它遇到 non-ASCII 码时,常常假设它不存在,而将它的第八个位元截去! 这是所谓的 8-bit clean 问题。

例如,你的 telnet 程式总是认为你输入的都是七位元的 ASCII 码。当你输入中文时,每每将第八位元砍掉,所以都变成乱码。

网路上的通讯程式也常常只能传输七位元的资料。较早期的 sendmail 程式就是恶名昭彰的例子。 sendmail 只能接送含七位元的信件,导致我们在传送中文信件时,必须采用各式各样奇怪的 编码格式 (如 uuencode, base64, QP 等),这往往又为收信者带来很大的困扰! (我常在想如果当初电子邮件的创造者能多一点点的远见,我们今天就会少许多的问题!)

在网路上这个问题显得更为复杂。即使你和你的收信人的机器都已经安装了可以处理中文信件的 sendmail 程式,对方仍有可能收到乱码信件。 因为这封信在到达对方手中前可能经过好多部主机,如果其中一部机器的 sendmail 将第八位元截去,事情就完了! 对於 client/server 架构的程式,问题可能出在 client 端,也可能是在 server 端,或是双方都有。

除了无法处理 non-ASCII 码资料的问题之外,应用程式无法辨识中文编码也是一大问题。 也就是,很多程式(即使能正确处理八位元的资料)都将一个中文字视为两个独立的位元组。这在许多情况下不会有什麽不好,但在某些场合下就显得很糟!

最显然的例子,即使你能正确的输入中文,可是当你按下倒退键(backspace)时,往往只倒後了一个位元组而将一个好好的中文字截成两半,剩下的那半当然就成了乱码。 还有,文书编辑器可能在一个中文字中间换行而导致出现乱码,或是将一行很长的中文句子当作一个很长的英文字母而不换行,使得画面变得很难看。

还有更糟的! 某些中文字所含的特殊内码对某些应用程式具有特别的意义,这导致程式遇到这些内码时将产生严重的错误,或是当掉。

下面将试著为这些问题提出一些解决之道,但是这仍是片面的,不完全的,而且不能令人满意。 也许只有当所有的软体都能为中文量身打造时问题才可能真正的解决。

话虽如此,愈来愈多的程式在设计上已经注意到国际化的问题,例如现在大部分主机的 sendmail 程式都已经能正确处理 8-bit 的信件 --- 因为不仅仅是传输中文信件需要 8-bit, 现在很多的多媒体邮件也都需要用 8-bit 传送。 很多软体 已经完全不需修改,或者只要开启一些特殊的选项,就能使用中文。 同时也有愈来愈多人正在为软体的中文化而努力。且让我们拭目以待。


Next Previous Contents