现在的位置: 首页 > 综合 > 正文

linux平台下的中文化问题

2013年03月24日 ⁄ 综合 ⁄ 共 2526字 ⁄ 字号 评论关闭

初稿:2006.12.22
编辑:2007.8.2
author: denny
Email: wqf363@hotmail.com

什么是我心目中的真正、彻底支持中文的 Linux操作系统呢?我想它至少应该:

★ 有可以输入输出中文的控制台。

★ 所有命令的提示和出错信息会用中文表达。

★ 所有的库函数和应用软件都不需要特殊方法处理中文。

★ 所有的man pages可以用中文显示。

★ Xwindow下的应用程序不需要特殊改动就可以输入、输出中文。

 

LINUX中文化有两个历程,一是本地化(Localization),即如何将系统中的其它语言的信息转变为本地的文字。对于Linux具体而言,就是要让应用程序的界面、提示信息变成中文。二是国际化(Internationalization),即是如何透明地处理各种语言文字,在不需要对应用程序做改动的前提下,能够显示、输入、处理各种语言。

 

影响Linux中文信息处理的关键是中文信息编码.在中国,中文信息编码由政府负责制定并监督实施。这是为了保证对于所有的系统中文的编码都是一致的,能够互相进行操作。从计算机的应用开始,我国已经颁布了多种中文信息编码标准,常用的是GB2312-1980GB12345GB13000GBK),以及最新标准GB18030。值得一提的是,最新的GB18030标准将要作为强制标准实行,所有不支持GB18030标准的软件将不能作为产品出售。在这些标准都是向下兼容的.GB18030向下兼容 GBK GB2312 标准。

 

LINUX平台下解决世界上各种语言的处理的最好方式是xteamLINUX产品I18N.

Linux上实现I18N,所要做的工作是:

* 使Linux核心支持I18N
*
使glibc支持I18NglibcLinux系统中最底层的支持软件,通过glibc中提供的locale机制,应用程序能够实现I18N
*
使XWindow支持I18NXwindowLinux下最常用的图形界面系统,它采用了Xlocale机制为应用程序提供I18N支持。
*
使其它应用程序如JavaMozilla支持I18NJavaMozilla等跨平台应用提供自己的I18N支持。

 

下面是常见的LINUX中文化问题示例:

Q1: 远程连上一台linux服务器,ls看远程文件时,中文文件名乱码?

: 实际情形如下:

[denny@im ~]$ ll

?????? 14400

-rw-r--r--   1 denny cvs      909  6??  5 10:47 alexa.txt

-rw-------   1 denny cvs   511431  8??  1 14:55 aspseek?о?.pdf

这时可先用glibc提供的locale机制,查看下远程的编码语言环境.

[denny@im ~]$ locale

LANG=zh_CN.GB18030

LC_CTYPE="zh_CN.GB18030"

LC_NUMERIC="zh_CN.GB18030"

LC_TIME="zh_CN.GB18030"

LC_COLLATE="zh_CN.GB18030"

LC_MONETARY="zh_CN.GB18030"

LC_MESSAGES="zh_CN.GB18030"

LC_PAPER="zh_CN.GB18030"

LC_NAME="zh_CN.GB18030"

LC_ADDRESS="zh_CN.GB18030"

LC_TELEPHONE="zh_CN.GB18030"

LC_MEASUREMENT="zh_CN.GB18030"

LC_IDENTIFICATION="zh_CN.GB18030"

LC_ALL=

 

很显然,远程使用的编码环境是gb18030, 这时如果我们要正确显示中文,可在远程登陆的Terminal中设置编码语言. (: 这种方式是改变终端显示编码来解决中文文件名问题)

 

Q2: 远程连上LINUX服务器后,改变了多种终端显示编码还是显示中文文件名乱码,怎么办?

: 如果在改变终端后,还是显示乱码,要不1)你统端支持的显示编码有限,没有对应原有文件名编码格式的选项; 2)这个文件原先并不是远程服务器的,是从别处下载来的,那说明这个文件编码格式并不是与你远程服务器的当前语言环境是一致的.这时我们可以尝试改变远程服务器机的语言环境,使用locale.

#或者其它编码格式

export LANG=zh_CN.utf-8

如果改后,这个文件能正确显示,说明这个文件名原是这种格式的.为了下次登陆后,能正确显示这个文件名,可将上面那个命令写入/etc/profile或者$HOME/.profile.

 

Q3: 本地语言环境是utf-8,远程是gb2312,将远程文件下载到本地后, 这个文件名乱码,怎么办?

:  这种情况比较麻烦,一般的远程下载工具并不会根据你的本地环境来调整编码格式,甚至你连接上远程上,看到的文件名可能是乱码,这种情形跟Q1类似,可在下载工具如gftp的选项中将remote charset 设置为gb2312,就能正确显示远程中文文件名,但下载后的文件格式仍然是gb2312编码的,在本地可能就会显示乱码.

这边有一种办法是:借助第三方工具,将编码格式进行转化,linux编码轮换工具convmv,使用如下:

 

convmv -r -f gb2312 -t utf-8 /你文件所在目录 --notest 0

# -r 是说明connmv支持递归,可对整个目录进行批量转化

 

Q4: MS IE中有很多编码选项,如果显示的页面是乱码,则可以在选项中选择其它编码语言进行显示,这个使用得浏览国外网站时特别方便,请问它是如何实现的,Firefox是否有类似插件?

 

 

Q5: MS是如何通过codepage来进行全球同步发行windows新版本的?

 

其它一些小技巧:

1)LINXU增加对其它语言字体的支持

/etc/sysconfig/i18n

[denny@localhost ~]$ cat /etc/sysconfig/i18n

LANG="zh_CN.UTF-8"

SUPPORTED="zh_CN.UTF-8:zh_CN:zh"

SYSFONT="latarcyrheb-sun16"

抱歉!评论已关闭.