本节尝试对在 Linux 上使用中文可能遇到的障碍进行一般性描述;这样,当您遇到这些问题时,就能更容易地找到关键点。事实上,这里描述的缺点不仅出现在 Linux 上,也出现在其他系统上。甚至可以说,整个计算机环境都与之相关。如果本节不合您的口味,或者您渴望直接行动,那么您可以跳转到 显示和输入中文 这一节!
众所周知,一个汉字在计算机中由两个字节组成。最流行的编码方法包括台湾地区使用的 BIG5 码和中国大陆使用的 GB 码。每个字的首字节几乎都大于数值 128,这就是我们所说的非 ASCII 码。(ASCII 码指的是小于 128 的代码。)
是的!那又怎样?重点来了!由于各种各样的原因,在早期,许多程序没有考虑到非 ASCII 码作为输入数据的可能性。
这类程序总是假设准备操作的数据都限制在 ASCII 码的范围内,最糟糕的是,当它们遇到非 ASCII 码时,最常用的方法是假设它们不存在并截断第 8 位。这就是所谓的 8 位清除问题。
例如,您的程序总是理所当然地认为您的输入都是 7 位宽的 ASCII 码。当您输入汉字时,它会擦除第 8 位,从而导致在中文情况下,输入始终变成乱码。
互联网上的通信程序通常只能传输 7 位数据。一个臭名昭著的例子是早期的 sendmail
程序。sendmail
只能发送和接收 7 位邮件,导致许多奇怪的编码方法,编码,这些方法给接收者造成了过度的干扰,被认为是发送中文邮件(如 uuencode、base64、QP 等)。(我经常想,如果电子邮件的创始人当初能更有远见,那么我们今天也许就不会有这么多问题了。)
这个问题在互联网上似乎更加复杂。即使您和您的接收者都安装了可能处理中文邮件的 sendmail
程序,接收者也可能以任何方式收到乱码邮件。这是因为邮件在到达目标之前可能会经过互联网上设置的多个主机,如果其中一个主机的 sendmail
截断了第 8 位,那么事情就会变得糟糕。对于具有客户端/服务器架构的程序,问题可能出在客户端,也可能出在服务器端;否则两者都有可能。
除了无法处理非 ASCII 码数据外,无法识别中文编码的应用程序也是一个主要问题。也就是说,大多数程序(即使它们可以准确地处理 8 位数据)都将一个汉字视为两个独立的字节。这在某些情况下不会引起问题,但在某些情况下会显示出不幸的灾难。
最明显的问题是,例如,即使您可以正确输入汉字,但是当您按一次退格键试图删除一个完整的词时,整个词将被分成两部分,这意味着在监视器上只能退格一个字节(列),而多余的半个字节则变成乱码。更甚的是,您可能在某些文本编辑器中在一个汉字的第二个字节处换行,然后就会出现乱码。此外,这些文本编辑器可能会认为一个长中文句子就像一个长英文句子一样,不会换行,使得屏幕画面难看且混乱。
还有更糟糕的事情!一些汉字包含特殊代码,这些代码对应于某些应用程序的特定含义,并且可能使这些程序在遇到这些代码时产生严重错误,甚至崩溃。
下面将尝试提出一些解决方法,但这些方法是片段式的、不完整的,并且也不能令人满意。只有当所有软件都能适应中文时,这些问题或许才能真正解决。
然而,越来越多的程序已经注意到国际化的重要性,例如,大多数主机的 sendmail
程序现在可以准确地处理 8 位邮件 --- 不仅传输中文邮件需要 8 位,而且许多多媒体邮件也需要 8 位。许多软件 已经完全不需要修改,或者只需要打开一些特殊选项就可以使用中文。同时,越来越多的人致力于中文软件的诞生。让我们拭目以待。