如何解决 linux 操作系统显示中文乱码问题?

发表于:2010-9-20 10:24

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  通过分析脚本,我知道,图形界面启动的时候脚本是根据LANG变量来决定是否启用输入法,以及启用哪种语言的输入法等。问题在于:我们还没有把LANG变量改成英语之前,系统得到的LANG变量是中文的,因此,它知道需要在图形界面启动过程中启用中文输入法,但把LANG变量改成英文后,系统根据LANG变量知道系统是英文的,它便不再启动中文输入法,也不再设置和导出相关的变量,导致中文输入法不可用。因此,只要在这个脚本中,“骗”过系统,让输入法脚本“以为”系统是中文的,它不就运行中文输入法,并导出相关变量了吗? 于是,通过分析脚本,我在xinput.sh中的:

lang_region=$(echo $tmplang | sed -e 's/\..*//') 

  后面又添加了

lang_region="zh_CN"

  直接把lang_region=$(echo $tmplang | sed -e 's/\..*//') 修改成 lang_region="zh_CN" 也可以

  多添加一行是为了以后改过来方便,直接删除添加的一行就可以了。

  当然,把for循环中的/etc/X11/xinit/xinput.d/${lang_region}该成

  /etc/X11/xinit/xinput.d/zh _CN也可以。

  当然还有其他的改法,前提是你要懂得shell 脚本的语法,看得懂脚本的意思。这样修改后,即便系统是英文的,xinput.sh脚本也会去读取/etc/X11/xinit/xinput.d/zh _CN 文件并导出其中的内容、设置好XMODIFERS等输入法变量,并运行iiimx输入法程序。

  那么为什么不在图形界面启动后直接运行iiimx输入法程序呢?实验一下就知道,这根本不行。因为输入法程序是须要和被输入的应用程序配合运行的软件,在运行过程中需要导出很多变量。直接运行iiimx只运行了主程序,而没相关变量,没办法和应用程序配合完成输入工作。

  完成修改工作后,保存脚本文件。输入startx命令启动图形界面,就可以用全英文的系统界面和中文输入法了。但需要注意的是:由于系统是全英文的,默认输入法也是英文,通过GNOME或者KDE菜单起动的应用程序第一次输入中文的时候不能按ctrl+空格来切换到中文,需要用鼠标在任务栏上点击输入法图标切换,第一次切换后以后就可以用ctrl+空格快捷键来切换中英文输入法了。

  四,一些后续问题

  某些软件,比如Open Office,通过GNOME或者KDE菜单启动的话,即使切换到中文输入法也输不进中文,这是因为整个桌面系统的环境是英文的,软件“继承”了英文环境的相关变量,这些软件就“认死理”,就是不让输入中文,这时候可以打开一个gnome终端,把LANG变量临时设置成zh_CN.UTF-8 :

  [root@gucuiwen ~]# LANG="zh_CN.UTF-8"

  然后在这个gnome终端中,用命令打开open office:

  [root@gucuiwen ~]# oowriter &

  这样Open Office就“继承”了gnome终端的LANG变量,起动后,工具栏和菜单等都是中文的,而且能输入中文。推而广之,任何软件都可以用这种方法,根据需要,打开中文界面的软件和英文界面的软件。要以英文界面运行软件时,只要从GNOME或者KDE菜单打开,要用中文界面运行软件时,在终端中修该LANG变量,从修改过LANG变量的终端中通过命令运行即可。当然,如果你还安装了其他语言的字体,你还可以以其他语言的界面来运行程序。如日语:

  [root@gucuiwen ~]# LANG="ja_JP.UTF-8"

  [root@gucuiwen ~]# gedit &

  我用上面的两条命令打开的gedit 编辑器就是全日语界面的,但是能输入中文和英文,并显示日文。从而达到,一个系统,多种语言和文字共存的目的。

  当然,前提是要安装了日语字体和日语locale,否则所有有文字的地方会全部显示成一连串问号。总之,要先懂得原理,之后想怎么玩就怎么玩,随心所欲,完全不受限制,充分享受用Linux的乐趣。

  五, 快速设置步骤:

  1.修改/etc/sysconf/i18n文件,把

  LANG="zh_CN.UTF-8"

  修改成:

  LANG="en_US.UTF-8"

  2.修改/etc/X11/xinit/xinitrc.d/xinput.sh文件,把其中一行:

  lang_region=$(echo $tmplang | sed -e 's/\..*//')

  修改成:

  lang_region=”zh_CN”

  3,重新启动图形界面,就可以用英文的界面并且正确显示中文和输入中文。

33/3<123
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号