<ins id='u0o3p'></ins>

<code id='u0o3p'><strong id='u0o3p'></strong></code>

    <acronym id='u0o3p'><em id='u0o3p'></em><td id='u0o3p'><div id='u0o3p'></div></td></acronym><address id='u0o3p'><big id='u0o3p'><big id='u0o3p'></big><legend id='u0o3p'></legend></big></address>

    1. <tr id='u0o3p'><strong id='u0o3p'></strong><small id='u0o3p'></small><button id='u0o3p'></button><li id='u0o3p'><noscript id='u0o3p'><big id='u0o3p'></big><dt id='u0o3p'></dt></noscript></li></tr><ol id='u0o3p'><table id='u0o3p'><blockquote id='u0o3p'><tbody id='u0o3p'></tbody></blockquote></table></ol><u id='u0o3p'></u><kbd id='u0o3p'><kbd id='u0o3p'></kbd></kbd>
    2. <i id='u0o3p'><div id='u0o3p'><ins id='u0o3p'></ins></div></i>

          <i id='u0o3p'></i>

        1. <span id='u0o3p'></span>

          <dl id='u0o3p'></dl>
          <fieldset id='u0o3p'></fieldset>

          Linux系统中与中文显示相关的一些编码设置方法

          • 时间:
          • 浏览:10
          • 来源:124软件资讯网

              对于海内的Linux用户,经常烦恼的一个问题是:系统经常在需要显示中文的时间却显示成了乱码,而由于某些缘故原由,需要英文界面的系统的时间,却苦于系统不能正常输入和显示中文.另外,由于大部门主要Linux刊行版都是以英语为主体的,英文界面的系统和应用法式不管在界面的雅观水平和稳固水平上都比中文的略好一些,种种希奇的BUG也要少一些  。因此  ,许多稍微有英语基础的Linux用户都宁愿使用英文界面的系统  。可是 ,矛盾又突现出来:在英文系统下  ,怎样才气正常显示和输入中文呢?有没有一箭双鵰的方案呢?因此  ,笔者最先探索怎样解决这个问题  。我的完善状态是:系统和应用法式所有为英文(系统菜单、应用法式工具栏、默认输入法等)  ,而我需要阅读和撰写中文文档的时间  ,能准确的显示中文并调出中文输入法 。经由实验 ,设置乐成 ,现在以FC4 Linux为例  ,解说一些相关知识和设置历程  。

              本文主要通过修改系统设置的历程来展现修改linux系统设置的一样平常思绪和历程  ,若是你不太有耐心看完  ,请跳过文章的1—4节 ,直接看第五节快速设置部门  。

              一 ,相关变量先容

              我们知道大部门Linux系统是无所谓中文版和英文版的 ,以FC4 Linux为例,系统刊行的时间全天下都一样  ,系统是中文的照旧英文的完全取决于你选择的语言包 。差别国家的人在安装使用的时间选择属于自己国家的语言包  ,应用法式中的语言也不是写死的  ,它凭据系统的设置来挪用相关的语言 ,以是  ,一个应用法式写出来不经由修改  ,全天下差别国家的用户都可以以母语界面使用它 ,这就事所谓的internationalization(国际化)  ,简称 i18n  。这也是未来软件的生长趋势 。

              那么  ,若是我在系统中安装了差别的语言包和差别的字体 ,系统是怎样判断我所要的语言界面并挪用相关的字体的呢?系统中那些文件和变量在控制这些呢?

              在redHat和FC系列Linux系统下  ,记载系统默认使用语言的文件是/etc/sysconfig/i18n,若是默认安装的是中文的系统  ,i18n的内容如下:

              代码:

              代码如下:

              LANG="zh_CN.UTF-8" SYSFONT="latarcyrheb-sun16" SUPPORTED="zh_CN.UTF-8:zh_CN:zh"

              其中LANG变量是language的简称  ,稍微有英语基础的用户一看就看出来这个变量是决议系统的默认语言的 ,即系统的菜单、法式的工具栏语言、输入法默认语言等 。SYSFONT是system font的简称  ,决议系统默认用哪一种字体  。SUPPORTED变量决议系统支持的语言 ,即系统能够显示的语言  。需要说明的是 ,由于盘算机起源于英语国家 ,因此 ,不管你把这些变量设置成什么 ,英语总是默认支持的 ,而且不管用什么字体  ,英文字体总包罗在其中 。

              这些变量中LANG变量是在字符模式和图形界面下都用到的 ,在你登录系统后就被读取并生效  ,信赖许多人在字符界面下输入Linux下令的时间经常会遇到显示出来的堕落信息是乱码的情形  ,必须安装zhcon或者cce等字符模式下的中文软件才气正常显示中文的堕落信息  。若是我不要他显示中文乱码 ,我也不要为了看个很简朴的堕落信息而特意起用zhcon那我该怎么办呢?一个简朴的零时解决的措施就是设置一下LANG变量:

              代码:

              代码如下:

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

              即把系统的语言暂时设置成英文  ,或者更简朴一点  ,可以直接这样:

              代码:

              代码如下:

              [root@gucuiwen ~]# LANG=""

              即把LANG变量清空  ,由于英语是无论什么情形都支持的  ,LANG变量被清空后  ,系统就默认用英语  。这样设置后  ,在字符模式下输出的堕落信息等就是全英文的了  。但这种设置是暂时的 ,只是暂时改变了LANG这个bash变量而已 。当退出重新登录或者切换到其他字符终端后就无效了  。

              到现在 ,读者应该想到了 ,只要把i18n文件中的LANG变量设置成英文的”en_US.UTF-8”  ,就可以永世解决这个问题了 。修改后的文件如下:

              代码:

              代码如下:

              #LANG="en_US.UTF-8" SYSFONT="latarcyrheb-sun16" SUPPORTED="zh_CN.UTF-8:zh_CN:zh"

              请不要把LANG变量简朴的清空 ,由于这个变量不仅在字符模式下用到  ,在图形界面下也用到  ,简朴清空在字符模式下确实不会有问题 ,但在图形界面下  ,却会造成中文无法正常显示的情形 ,在已往Re d ha t 系列的版本中i18n文件中另有一个叫LANGUAGE的变量  ,专门控制图形界面下的语言设置  ,现在的FC系列中已经把这两个变量整合成一个变量了  。

              经由修改这个变量 ,重新起动图形界面后  ,就可以看到界面一经完全是英文的了 。可是按ctrl+空格却不能调出中文输入法 ,输入法菜单中也不能添加中文输入法 。我们只简朴的修改了LANG变量改变了系统语言设置  ,固然这一步也可以用图形界面下的工具修改  ,而不用亲自修改设置文件  。

              二 ,关于运行品级

              这个问题似乎和这篇文章的的主题无关  ,可是介于现在越来越多的linux新手遇到linux图形界面的问题  ,而且在中文输入法设置历程中也牵涉到这些问题 ,因此想顺便提一下  。

              现在的linux安装完成后  ,默认就运行在第5个系统运行级别  。在SYSTEM V 气势派头的UNIX系统中 ,系统被分为差别的运行级别  ,这和BSD分支的UNIX有所差别  ,常用的为0~6七个级别:

              0 关机

              1 单用户

              2 不带网络的多用户

              3 带网络的多用户

              4 保留  ,用户可以自给界说

              5 图形界面的多用户

              6 重起系统

              由于现在的Linux系统安装完后就运行在第5个级别  ,即系统启动后直接进入图形界面 ,而不用在字符模式下登录后用startx或者xinit 来起动图形界面  。这样看起来很利便  。可是有什么坏处呢? 一旦你改变了某些设置  ,显示出问题的时间 ,系统不停在图形和字符间派徊  ,新手又不知道怎样应对  ,十分贫苦  ,而且对于学习研究Linux的人来说  ,这样倒霉于相识和学习Linux底层的一些工具  。很早就用Linux的老用户都知道 ,已往的Linux如 redhat6.0  ,都是默认运行接别为3 ,纵然厥后的RedHat9.0也可以在安装时间选默认字符登录照旧图形登录 。但现在的FC系列和其他大多数版本都不管三七二十一直接帮用户选择了直接图形界面登录 。虽然对于大多数菜鸟来说  ,Linux确实越来越简朴了  ,可是许多兴趣  ,那些新手也体验不到了  。

              也许你不信赖  ,直接图形登录到系统确实会有许多问题  ,因此  ,作为一个有6年Linux使用履历的Linux和Solaris 系统治理员  ,我强烈建议在系统安装完成后把系统的默认运行品级设置在第3级 ,在字符终端登录后 ,再手工输入startx 下令起动图形界面  。可以用如下的要领修改:

              用文本编辑器修改 /etc/inittab文件  ,把

              代码:

              代码如下:

              id:5:initdefault:

              这一行  ,修改成

              代码:

              代码如下:

              id:3:initdefault:

              生存后就重起  ,系统就默认起动到字符界面  。差别运行级别之间的差异的在于系统默认起动的服务的差别 ,如运行级别3默认不启动X图形界面服务  ,而运行级别5 却默认起动  。本质上是没有区此外  ,更无所谓差别级别间功效强弱的问题 。用户完全可自给界说差别级此外默认服务  。在任何运行级别 ,用户都可用init 下令来切换到其他运行级别 。

              三  ,调出中文输入法:

              我之以是要在上面费那么多文字来讲系统运行级别 ,是由于对系统的熟悉是从底部向上最先的  。

              先把默认运行级别修改成3级别 ,固然  ,若是你着实不想修改  ,就暂时用init 3下令切换到第3级  。

              这样你就可以用startx起动图形界面 ,然后用ctrl+alt+backspace退出图形界面 。请注重我说的是“退出”图形界面 ,而不是按ctrl+alt+F2切到一个字符终端  。

              好了  ,一切由startx最先  。当你需要在Linux系统中设置某个工具  ,或者设置某个服务的时间  ,最要害的是要知道  ,这一切是怎么最先的  。知其然必须知其以是然  。若是你有空把/etc/rc.d目录下的系统起动时运行的剧本通读一遍  ,就完全知道了/etc下的种种设置文件是用来干什么的、怎样修改、修改后有什么效果等等  。玩起系统来也能为所欲为想怎么改就怎么改 。这就是我一直强调的,知其然一定要知其以是然  。一定要深入系统 ,读剧本 ,学会用下令和手工修改系统设置文件 。这样对系统才会有透彻的相识  ,整天用图形界面的工具是不能资助你对系统有教为透彻深入的相识的  ,差别的linux系统提供的图形界面设置法式会差别  ,但下令和设置文件都是相同的  ,越是底层的工具越具有通用性  。以是  ,应当先学会手动设置和修改系统设置文件 ,等熟悉了以后  ,再用图形界面的工具修改  ,以便淘汰事情量  。

              上面提了一下我解决问题的思绪  。我是顺着这个思绪最先的:

              中文输入法是在图形界面下使用的  ,是图形界面下运行的一个法式  。而图形界面中的一切  ,都是由startx法式开启运行的  。这就是问题的泉源  。

              找出startx的位置:

              代码:

              代码如下:

              [root@gucuiwen ~]# which startx /usr/X11R6/bin/startx

              看startx是一个剧本照旧二进制文件:

              代码:

              代码如下:

              [root@gucuiwen ~]# file /usr/X11R6/bin/startx /usr/X11R6/bin/startx: Bourne shell script text executable

              发现startx是一个shell 剧本  ,于是我打开它剖析并阅读  ,看看能不能找到一些关于输入法起动历程和相关变量的线索:

              代码:

              代码如下:

              [root@gucuiwen ~]# vi /usr/X11R6/bin/startx

              我找到了该剧本在运行历程中挪用的其他剧本和设置文件的信息:

              代码:

              代码如下:

              userclientrc=$HOME/.xinitrc userserverrc=$HOME/.xserverrc sysclientrc=/etc/X11/xinit/xinitrc sysserverrc=/etc/X11/xinit/xserverrc

              而且知道  ,startx的目的是寻找系统中可用的桌面系统X服务器系统、以及用户自界说的参数  ,最终挪用xinit来初始化X图形界面  。我没有在startx剧本中找到直接和起动输入法相关的代码 ,于是就可以一定 ,输入法相关的代码在startx挪用的剧本中  。于是我来到

              /etc/X11/xinit/ 目录下 ,阅读并剖析该目录下的剧本  ,这些剧本有些是startx直接挪用的  ,有些是被startx挪用的剧本再挪用的  ,存在着多级嵌套的关系  ,没有一点耐心还真是搞不清晰  。最终我在/etc/X11/xinit/xinitrc.d目录中的xinput.sh剧本中找到了和输入法相关的代码:

              代码:

              代码如下:

              lang_region=$(echo $tmplang | sed -e 's/"..*//') lang_region="zh_CN"  #这一行是修改后加上去的 for f in $HOME/.xinput.d/${lang_region} " $HOME/.xinput.d/default " /etc/X11/xinit/xinput.d/${lang_region} " /etc/X11/xinit/xinput.d/default ; do [ -r $f ] && source $f && break done

              通太过析剧本  ,我知道  ,图形界面启动的时间剧本是凭据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,重新启动图形界面 ,就可以用英文的界面而且准确显示中文和输入中文  。