版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、中文顯示問題終端顯示,vi編輯器顯示中文顯示問題(終端顯示,vi編輯器顯示)2010-12-2722:41對于國內的Linux用戶,經常煩惱的一個問題是:系統(tǒng)常常在需要顯示中文的時候卻顯示成了亂碼,而由于某些原因,需要英文界面的系統(tǒng)的時候,卻苦于系統(tǒng)不能正常輸入和顯示中文。另外,由于大部分主要Linux發(fā)行版都是以英語為主體的,英文界面的系統(tǒng)和應用程序不管在界面的美觀程度和穩(wěn)定程度上都比中文的略好一些,各種奇怪的BUG&要少一些。因此,很多稍微有英語基礎的Linux用戶都寧愿使用英文界面的系統(tǒng)。但是,矛盾乂突現(xiàn)出來:在英文系統(tǒng)下,如何才能正常顯示和輸入中文呢?有沒有兩全其美的方案呢?因
2、此,筆者開始探索如何解決這個問題。我的完美狀態(tài)是:系統(tǒng)和應用程序全部為英文(系統(tǒng)菜單、應用程序工具欄、默認輸入法等),而我需要閱讀和撰寫中文文檔的時候,能正確的顯示中文并調出中文輸入法。經過嘗試,設置成功,現(xiàn)在以FC8為例,講解一些相關知識和設置過程。本文主要通過修改系統(tǒng)配置的過程來展現(xiàn)修改linux系統(tǒng)配置的一般思路和過程,如果你不太有耐心看完,請?zhí)^文章的1-4節(jié),直接看第五節(jié)快速設置部分。一、相關變量介紹我們知道大部分Linux系統(tǒng)是無所謂中文版和英文版的,以FC8為例,系統(tǒng)發(fā)行的時候全世界都一樣,系統(tǒng)是中文的還是英文的完全取決于你選擇的語言包。不同國家的人在安裝使用的時候選擇屆于自己國
3、家的語言包,應用程序中的語言也不是寫死的,它根據(jù)系統(tǒng)的設置來調用相關的語言,所以,一個應用程序寫出來不經過修改,全世界不同國家的用戶都可以以母語界面使用它,這就是所謂的internationalization(國際化),簡稱i18n(這里,讓我想起了配置文件/etc/sysconfig/i18n)。這也是未來軟件的發(fā)展趨勢。那么,如果我在系統(tǒng)中安裝了不同的語言包和不同的字體,系統(tǒng)是如何判斷我所要的語言界面并調用相關的字體的呢?系統(tǒng)中那些文件和變量在控制這些呢?在redHat和FC系歹ULinux系統(tǒng)下,記錄系統(tǒng)默認使用語言的文件是/etc/sysconfig/i18n,如果默認安裝的是中文的系
4、統(tǒng),i18n的內容如下:代碼:LANG="zh_CN.UTF-8"SYSFONT="latarcyrheb-sun16"SUPPORTED="zh_CN.UTF-Zh_CNzh"其中LAN豉量是language的簡稱,稍微有英語基礎的用戶一看就看出來這個變量是決定系統(tǒng)的默認語言的,即系統(tǒng)的菜單、程序的工具欄語言、輸入法默認語言等。SYSFONTsystemfont的簡稱,決定系統(tǒng)默認用哪一種字體。SUPPORTED量決定系統(tǒng)支持的語言,即系統(tǒng)能夠顯示的語言。需要說明的是,由于計算機起源于英語國家,因此,不管你把這些變量設置成什么,英語
5、總是默認支持的,而且不管用什么字體,英文字體總包含在其中。這些變量中LAN豉量是在字符模式和圖形界面下都用到的,在你登錄系統(tǒng)后就被讀取并生效,相信很多人在字符界面下輸入Linux命令的時候經常會遇到顯示出來的出錯信息是亂碼的情況,必需安裝zhcon或者cce等字符模式下的中文軟件才能正常顯示中文的出錯信息。如果我不要他顯示中文亂碼,我也不要為了看個很簡單的出錯信息而特意起用zhcon那我該怎么辦呢?一個簡單的零時解決的辦法就是設置一下LANG量:代碼:rootgucuiwen#LANG="en_US.UTF-8"或者rootgucuiwen#LANG="en_US
6、.GB2312"即把系統(tǒng)的語言臨時設置成英文,或者更簡單一點,可以直接這樣:代碼:rootgucuiwen#LANG=""即把LAN豉量活空,由于英語是無論什么情況都支持的,LANC&量被活空后,系統(tǒng)就默認用英語。這樣設置后,在字符模式下輸出的出錯信息等就是全英文的了。但這種設置是臨時的,只是臨時改變了LANG&個bash變量而已。當退出重新登錄或者切換到其他字符終端后就無效了。到現(xiàn)在,讀者應該想到了,只要把i18n文件中的LANGE量設置成英文的"en_US.UTF-8",就可以永久解決這個問題了。修改后的文件如下:代碼:#L
7、ANG="zh_CN.UTF-8"LANG="en_US.UTF-8"SYSFONT="latarcyrheb-sun16"SUPPORTED="zh_CN.UTF-Zh_CNzh"請不要把LAN豉量簡單的活空,因為這個變量不僅在字符模式下用到,在圖形界面下也用到,簡單活空在字符模式下確實不會有問題,但在圖形界面下,卻會造成中文無法正常顯示的情況,在過去Redhat系列的版本中i18n文件中還有一個叫LANGUAGE變量,專門控制圖形界面下的語言設置,現(xiàn)在的FC系列中已經把這兩個變量整合成一個變量了。經過修改這個變
8、量,重新起動圖形界面后,就可以看到界面已經完全是英文的了。但是按ctrl+空格卻不能調出中文輸入法,輸入法菜單中也不能添加中文輸入法。我們只簡單的修改了LANCgE量改變了系統(tǒng)語言設置,當然這一步也可以用圖形界面下的工具修改,而不用親自修改配置文件。二、關于運行等級這個問題似乎和這篇文章的的主題無關,但是介于現(xiàn)在越來越多的linux新手遇到linux圖形界面的問題,而且在中文輸入法設置過程中也牽涉到這些問題,因此想順便提一下?,F(xiàn)在的linux安裝完成后,默認就運行在第5個系統(tǒng)運行級別。在SYSTEM颯格的UNIX系統(tǒng)中,系統(tǒng)被分為不同的運行級別,這和BS協(xié)支的UNIX有所不同,常用的為06七個
9、級別:0關機1單用戶2不帶網(wǎng)絡的多用戶3帶網(wǎng)絡的多用戶4保留,用戶可以自給定義5圖形界面的多用戶6重起系統(tǒng)由于現(xiàn)在的Linux系統(tǒng)安裝完后就運行在第5個級別,即系統(tǒng)啟動后直接進入圖形界面,而不用在字符模式下登錄后用startx或者xinit來起動圖形界面。這樣看起來很方便。但是有什么壞處呢?一旦你改變了某些設置,顯示出問題的時候,系統(tǒng)不斷在圖形和字符問派徊,新手乂不知道如何應對,十分麻煩,而且對于學習研究Linux的人來說,這樣不利于了解和學習Linux底層的一些東西。很早就用Linux的老用戶都知道,過去的Linux如redhat6.0,都是默認運行接別為3,即使后來的RedHat9.0也可
10、以在安裝時候選默認字符登錄還是圖形登錄。但現(xiàn)在的FC系列和其他大多數(shù)版本都不管三七二十一直接幫用戶選擇了直接圖形界面登錄。雖然對于大多數(shù)菜鳥來說,Linux確實越來越簡單了,但是很多樂趣,那些新手也體驗不到了。也許你不相信,直接圖形登錄到系統(tǒng)確實會有很多問題,因此,作為一個有6年Linux使用經驗的Linux和Solaris系統(tǒng)管理員,我強烈建議在系統(tǒng)安裝完成后把系統(tǒng)的默認運行等級設置在第3級,在字符終端登錄后,再手工輸入startx命令起動圖形界面??梢杂萌缦碌姆椒ㄐ薷模河梦谋揪庉嬈餍薷?etc/inittab文件,把代碼:id:5:initdefault這一行,修改成代碼:id:3:ini
11、tdefault:保存后就重起,系統(tǒng)就默認起動到字符界面。不同運行級別之間的差別的在于系統(tǒng)默認起動的服務的不同,如運行級別3默認不啟動X圖形界面服務,而運行級別5卻默認起動。本質上是沒有區(qū)別的,更無所謂不同級別問功能強弱的問題。用戶完全可自給定義不同級別的默認服務。在任何運行級別,用戶都可用init命令來切換到其他運行級別。三、調出中文輸入法:我之所以要在上面費那么多筆墨來講系統(tǒng)運行級別,是因為對系統(tǒng)的認識是從底部向上開始的。先把默認運行級別修改成3級別,當然,如果你實在不想修改,就臨時用init3命令切換到第3級。這樣你就可以用startx起動圖形界面,然后用ctrl+alt+backspa
12、ce退出圖形界面。請注意我說的是”退出”圖形界面,而不是按ctrl+alt+F2切到一個字符終端。好了,一切由startx開始。當你需要在Linux系統(tǒng)中設置某個東西,或者配置某個服務的時候,最關鍵的是要知道,這一切是怎么開始的。知其然必需知其所以然。如果你有空把/etc/rc.d目錄下的系統(tǒng)起動時運行的腳本通讀一遍,就完全知道了/etc下的各種配置文件是用來十什么的、如何修改、修改后有什么效果等等。玩起系統(tǒng)來也能隨心所欲想怎么改就怎么改。這就是我一直強調的,知其然一定要知其所以然。一定要深入系統(tǒng),讀腳本,學會用命令和手工修改系統(tǒng)配置文件。這樣對系統(tǒng)才會有透徹的了解,整天用圖形界面的工具是不能
13、幫助你對系統(tǒng)有教為透徹深入的了解的,不同的linux系統(tǒng)提供的圖形界面配置程序會不同,但命令和配置文件都是相同的,越是底層的東西越具有通用性。所以,應當先學會手動配置和修改系統(tǒng)配置文件,等熟悉了以后,再用圖形界面的工具修改,以便減少工作量。上面提了一下我解決問題的思路。我是順著這個思路開始的:中文輸入法是在圖形界面下使用的,是圖形界面下運行的一個程序。而圖形界面中的一切,都是由startx程序開啟運行的。這就是問題的根源。找出startx的位置:代碼:rootgucuiwen#whichstartx/usr/X11R6/bin/startx看startx是一個腳本還是二進制文件:代碼:root
14、gucuiwen#file/usr/X11R6/bin/startx/usr/X11R6/bin/startx:Bourneshellscripttextexecutable發(fā)現(xiàn)startx是一個shell腳本,于是我打開它分析并閱讀,看看能不能找到一些關于輸入法起動過程和相關變量的線索:代碼:rootgucuiwen#vi/usr/X11R6/bin/startx我找到了該腳本在運行過程中調用的其他腳本和配置文件的信息:代碼:userclientrc=$HOME/.xinitrcuserserverrc=$HOME/.xserverrcsysclientrc=/etc/X11/xinit/x
15、initrcsysserverrc=/etc/X11/xinit/xserverrc并且知道,startx的目的是尋找系統(tǒng)中可用的桌面系統(tǒng)X服務器系統(tǒng)、以及用戶自定義的參數(shù),最終調用xinit來初始化X圖形界面。我沒有在startx腳本中找到直接和起動輸入法相關的代碼,于是就可以肯定,輸入法相關的代碼在startx調用的腳本中。于是我來到/etc/X11/xinit/目錄下,閱讀并分析該目錄下的腳本,這些腳本有些是startx直接調用的,有些是被startx調用的腳本再調用的,存在著多級嵌套的關系,沒有一點耐心還真是搞不活楚。最終我在/etc/X11/xinit/xinitrc.d目錄中的xi
16、nput.sh腳本中找到了和輸入法相關的代碼:代碼:lang_region=$(echo$tmplang|sed-e's/.*/')lang_region="zh_CN"#這一行是修改后加上去的forfin$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&&breakdone通過分析腳本,我知道,圖形界面啟動
17、的時候腳本是根據(jù)LAN豉量來決定是否啟用輸入法,以及啟用哪種語言的輸入法等。問題在于:我們還沒有把LAN豉量改成英語之前,系統(tǒng)得到的LAN豉量是中文的,因此,它知道需要在圖形界面啟動過程中啟用中文輸入法,但把LAN豉量改成英文后,系統(tǒng)根據(jù)LANGGE量知道系統(tǒng)是英文的,它便不再啟動中文輸入法,也不再設置和導出相關的變量,導致中文輸入法不可用。因此,只要在這個腳本中,"騙"過系統(tǒng),讓輸入法腳本"以為"系統(tǒng)是中文的,它不就運行中文輸入法,并導出相關變量了嗎?于是,通過分析腳本,我在xinput.sh中的:代碼:lang_region=$(echo$tmpla
18、ng|sed-e's/.*/')后面乂添加了lang_region="zh_CN"直接把lang_region=$(echo$tmplang|sed-e's/.*/')修改成lang_region="zh_CN”也可以多添加一行是為了以后改過來方便,直接刪除添加的一行就可以了。當然,把for循環(huán)中的/etc/X11/xinit/xinput.d/$lang_region該成/etc/X11/xinit/xinput.d/zh_CN也可以。當然還有其他的改法,前提是你要懂得shell腳本的語法,看得懂腳本的意思。這樣修改后,即便系統(tǒng)是
19、英文的,xinput.sh腳本也會去讀取/etc/X11/xinit/xinput.d/zh_CN文件并導出其中的內容、設置好XMODIFERS輸入法變量,并運行iiimx輸入法程序。那么為什么不在圖形界面啟動后直接運行iiimx輸入法程序呢?實驗-下就知道,這根本不行。因為輸入法程序是須要和被輸入的應用程序配合運行的軟件,在運行過程中需要導出很多變量。直接運行iiimx只運行了主程序,而沒相關變量,沒辦法和應用程序配合完成輸入工作。完成修改工作后,保存腳本文件。輸入startx命令啟動圖形界面,就可以用全英文的系統(tǒng)界面和中文輸入法了。但需要注意的是:由于系統(tǒng)是全英文的,默認輸入法也是英文,通
20、過GNOM成者KD昧單起動的應用程序第一次輸入中文的時候不能按ctrl+空格來切換到中文,需要用鼠標在任務欄上點擊輸入法圖標切換,第一次切換后以后就可以用ctrl+空格快捷鍵來切換中英文輸入法了。四、一些后續(xù)問題某些軟件,比如OpenOffice,通過GNOME者KDES單啟動的話,即使切換到中文輸入法也輸不進中文,這是因為整個桌面系統(tǒng)的環(huán)境是英文的,軟件"繼承"了英文環(huán)境的相關變量,這些軟件就"認死理",就是不讓輸入中文,這時候可以打開一個gnom玫端,把LANGS:量臨時設置成zh_CN.UTF-8rootgucuiwen#LANG="zh
21、_CN.UTF-8"然后在這個gnome終端中,用命令打開openoffice:rootgucuiwen#oowriter&這樣OpenOffice就”繼承"了gnom玫端的LAN豉量,起動后,工具欄和菜單等都是中文的,而且能輸入中文。推而廣之,任何軟件都可以用這種方法,根據(jù)需要,打開中文界面的軟件和英文界面的軟件。要以英文界面運行軟件時,只要從GNOME者KD昧單打開,要用中文界面運行軟件時,在終端中修該LAN豉量,從修改過LAN豉量的終端中通過命令運行即可。當然,如果你還安裝了其他語言的字體,你還可以以其他語言的界面來運行程序。如日語:rootgucuiwen#
22、LANG="ja_JP.UTF-8"rootgucuiwen#gedit&我用上面的兩條命令打開的gedit編輯器就是全日語界面的,但是能輸入中文和英文,并顯示日文。從而達到,一個系統(tǒng),多種語言和文字共存的目的。當然,前提是要安裝了日語字體和日語locale,否則所有有文字的地方會全部顯示成一連申問號??傊?,要先懂得原理,之后想怎么玩就怎么玩,隨心所欲,完全不受限制,充分享受用Linux的樂趣。五、快速設置步驟:1、修改/etc/sysconf/i18n文件,把LANG="zh_CN.GB2312"SUPPORTED="zh_CN.UT
23、F-Zh_CNzh:en_US.UTF-8en_USen"SYSFONT="latarcyrheb-sun16"2、修改/etc/X11/xinit/xinitrc.d/xinput.sh文件,把其中一行:lang_region=$(echo$tmplang|sed-e's/.*/')修改成:lang_region="zh_CN"3、重新啟動圖形界面,就可以用英文的界面并且正確顯示中文和輸入中文。linux亂碼的解決方法2010-04-0121:45就是從數(shù)據(jù)庫中取出來時,在存入linux的文件里時,在字符流時制定編碼格式。代碼
24、如下:ileOutputStreamfos=newFileOutputStream(newFile(filePath),true);riterout=newOutputStreamWriter(fos,"UTF-8");ut.write(s);ut.write("n");ut.flush();os.close();ut.close();*vi.bash_profileexportlang=zh_CNvi/etc/sysconfig/i18nLANG="en_US.UTF-8"SUPPORTED="en_US.UTF-en_U
25、Sen:zh_CN.GB18030zh_CNzh:zh_TW.big5:zh_TWzh:ja_JP.UTF-8:ja_JP:ja:ko_KR.eucKRko_KRko"SYSFONT="latarcyrheb-sun16"改第一個不管用,好像第二個尤其重要,必須改。*六、console終端亂碼在/etc/profile文件的最后一行添加如下內容:exportLC_ALL="zh_CN.GB18030"七、xwindow終端亂碼在/etc/sysconfig/i18n文件的最后一行添加如下內容:exportLC_ALL="zh_CN.G
26、B18030"*亂碼分兩種情況:1、終端(純shell界面)的亂碼vi/etc/profilexportLC_ALL="zh_CN.GB18030:zh_CN.GB2312zh_CN.GBKzh_CNen_US.UTF-8:en_USen:zh:zh_TWzh_CN.BIG5"保存退出,reboot系統(tǒng)即可.2、X-window(圖形界面)的亂碼vi/etc/sysconfig/i18nLANG="zh_CN.GB18030:zh_CN.GB2312zh_CN.GBKzh_CNen_US.UTF-8:en_USen:zh:zh_TWzh_CN.BIG5&
27、quot;LANGUAGE="zh_CN.GB18030h_CN.GB2312zh_CN.GBKzh_CNen_US.UTF-8en_USen:zh:zh_TWzh_CN.BIG5"保存reboot即可.*3、linux虛擬機,用VIM出現(xiàn)了中文亂碼問題,查找了資料,解決方法如下:vi/etc/sysconfig/i18n內容改為LANG="zh_CN.GB18030"LANGUAGE="zh_CN.GB18030h_CN.GB2312zh_CN"SUPPORTED="zh_CN.GB18030i_CNzh:en_US.UTF-8en_USen"SYSFONT="lat0-sun16"這樣中文在SSH,telnet終端就可以正常顯示了其中,主要修改的內容主要為zh_CN.GB
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 互聯(lián)網(wǎng)行業(yè)安全保護建議
- 2024年社會健康大班教案
- 財務部全年工作概述
- 《肺栓塞診治新進展》課件
- 化妝師為客戶化妝設計妝容
- 兒童教育行業(yè)教育啟蒙培訓心得
- 防務行業(yè)戰(zhàn)術訓練培訓總結
- 2024年稅務師題庫及完整答案
- 2024年計算機網(wǎng)絡個人簡歷
- 2024年甘孜職業(yè)學院單招職業(yè)技能測試題庫有答案
- 物業(yè)管理服務領域:保利物業(yè)企業(yè)組織架構及部門職責
- 如何在地震演練中應對火災和燃氣泄漏
- 融媒體專題報道方案
- 工作失誤匯報
- 呼吸科主任述職報告
- 旅游法規(guī)期末試卷與參考答案匯編
- 11054-國家開放大學2023年春期末統(tǒng)一考試《流通概論》答案
- 晉江物流行業(yè)分析
- 編譯原理考試題及答案匯總
- 國家開放大學2023年7月期末統(tǒng)一試《11132衛(wèi)生管理》試題及答案-開放本科
- 咽喉癌病歷書寫
評論
0/150
提交評論