linux中文亂碼問題及locale詳解

2021-09-06 15:17:41 字數 4034 閱讀 8242

一、修改系統預設語言及中文亂碼問題

記錄系統預設使用語言的檔案是/etc/sysconfig/i18n,如果預設安裝的是中文的系統,i18n的內容如下: lang="zh_cn.utf-8" sysfont="latarcyrheb-sun16" supported="zh_cn.utf-8:zh_cn:zh" linuxtype=targeted

lang變數是language的簡稱,決定系統的預設語言的,即系統的選單、程式的工具欄語言、輸入法預設語言等。sysfont是system font的簡稱,決定系統預設用哪一種字型。supported變數決

定系統支援的語言,即系統能夠顯示的語言。需要說明的是,由於計算機起源於英語國家,因此,不管你把這些變數設定成什麼,英語總是預設支援的,而且不管用什麼字型,英文本型總包含在其中。

臨時調整終端亂碼現象:# lang="en_us.utf-8" 即把系統的語言臨時設定成英文,或者更簡單一點,可以直接這樣: # lang="" 或export lang=""

lang變數被清空後,系統就預設用英語。這樣設定後,在字元模式下輸出的出錯資訊等就是全英文的了。但這種設定是臨時的,只是臨時改變了lang這個bash變數而已。當退出重新登入或者切換到其他字元終端後就無效了。只要把i18n檔案中的lang變數設定成英文的」en_us.utf-8」,就可以永久解決這個問題了。命令:vi etc/sysconfig/i18n

修改後的檔案如下: #lang="zh_cn.utf-8" lang="en_us.utf-8" sysfont="latarcyrheb-sun16" supported="zh_cn.utf-8:zh_cn:zh" 

請不要把lang變數簡單的清空,因為這個變數不僅在字元模式下用到,在圖形介面下也用到,簡單清空在字元模式下確實不會有問題,但在圖形介面下,卻會造成中文無法正常顯示的情況,在過去redhat系列的版本中i18n檔案中還有乙個叫language的變數,專門控制圖形介面下的語言設定,現在的fc系列中已經把這兩個變數整合成乙個變數了。 

二、locale

程式執行使用一套語言需要有字符集(資料)和字型(顯示),locale是根據計算機使用者所使用的語言,所在國家或者地區,以及當地的文化傳統所定義的乙個軟體執行時的語言環境。

locale常用操作

1、檢視現有語言環境:

locale

2、可用語言環境:

locale -a

3、臨時修改語言環境:

aix:

export lang=en_us

export lang=zh_cn

linux:

export lang=en_us.utf-8

export lang=zh_cn.utf-8

4、永久修改系統級字符集:

修改/etc/sysconfig/i18n

英文版系統:

lang="en_us.utf-8"

sysfont="latarcyrheb-sun16"

中文版系統:

lang="zh_cn.utf-8"或者lang="zh_cn.gbk"

sysfont="latarcyrheb-sun16"

vi /.bash_profile

三、安裝中文字符集

1、安裝所有與中文支援相關的包

# yum -y groupinstall chinese-support

2、修改字元編碼配置檔案

# vi /etc/sysconfig/i18n

修改後內容如下:

lang="zh_cn.utf-8"

supported="zh_cn:zh:en_us.utf-8:en_us:en:zh_cn.gb18030"

sysfont="latarcyrheb-sun16"

locale詳解

在 linux 中通過 locale 來設定程式執行的不同語言環境,locale 由 ansi c 提供支援。locale 的命名規則為:

《語言》_《地區》.《字符集編碼》

如:zh_cn.utf-8,zh代表中文,cn代表大陸地區,utf-8表示字符集。

在locale環境中,有一組變數,代表國際化環境中的不同設定:

1、lc_collate

定義該環境的排序和比較規則

2、lc_ctype

用於字元分類和字串處理,控制所有字元的處理方式,包括字元編碼,字元是單位元組還是多位元組,如何列印等。是最重要的乙個環境變數。

3、lc_monetary

貨幣格式

4、lc_numeric

非貨幣的數字顯示格式

5、lc_time

時間和日期格式

6、lc_messages

提示資訊的語言。另外還有乙個language引數,它與lc_messages相似,但如果該引數一旦設定,則lc_messages引數就會失效。language引數可同時設定多種語言資訊,如

languane="zh_cn.gb18030:zh_cn.gb2312:zh_cn"。

7、lang

lc_*的預設值,是最低級別的設定,如果lc_*沒有設定,則使用該值。類似於 lc_all。

8、lc_all

它是乙個巨集,如果該值設定了,則該值會覆蓋所有lc_*的設定值。注意,lang的值不受該巨集影響。

乙個例子:

設定前,使用預設locale:

# locale

lang="posix"

lc_ctype="posix"

lc_numeric="posix"

lc_time="posix"

lc_collate="posix"

lc_monetary="posix"

lc_messages="posix"

lc_*****="posix"

lc_name="posix"

lc_address="posix"

lc_telephone="posix"

lc_measurement="posix"

lc_identification="posix"

lc_all=

設定後,使用zh_cn.gbk中文locale:

# export lc_all=zh_cn.gbk

# locale

lang=zh_cn.utf-8

lc_ctype="zh_cn.gbk"

lc_numeric="zh_cn.gbk"

lc_time="zh_cn.gbk"

lc_collate="zh_cn.gbk"

lc_monetary="zh_cn.gbk"

lc_messages="zh_cn.gbk"

lc_*****="zh_cn.gbk"

lc_name="zh_cn.gbk"

lc_address="zh_cn.gbk"

lc_telephone="zh_cn.gbk"

lc_measurement="zh_cn.gbk"

lc_identification="zh_cn.gbk"

lc_all=zh_cn.gbk

"c"是系統預設的locale,"posix"是"c"的別名。所以當我們新安裝完乙個系統時,預設的locale就是c或posix。

lang="zh_cn.utf-8" 

sysfont="latarcyrheb-sun16"

supported="zh_cn.utf-8:zh_cn:zh"

linuxtype=targeted

lang="zh_cn.gb18030"

language="zh_cn.gb18030:zh_cn.gb2312:zh_cn"

supported="zh_cn.gb18030:zh_cn:zh:en_us.utf-8:en_us:en"

sysfont="lat0-sun16"

Linux中文亂碼問題

安裝了centos6.5的虛擬機器,安裝過程中選擇了英文系統和英文語系,因此在虛擬機器中輸入中文字元時出現了亂碼的情況 檢視當前語言系統 echo lang user luihj1 bin echo lang en us.utf 8 檢視安裝的語言包,發現並沒有安裝中文語言包 user luihj1...

Linux 中文亂碼問題

陸陸續續碰到了很多linux下的中文亂碼問題,記錄下來 vi etc my.cnf 在mysqld下新增 mysqld character set server utf8 找到tomcat conf sever.xml 在下面的標籤中插入uriencoding utf 8 redirectport ...

Linux 中文亂碼問題

弄了好久還是亂碼 最終方法 進入 vim etc vimrc中 原先只有乙個 set encoding utf 8 fileencodings ucs bom,utf 8,cp936 改成 let termencoding encoding set encoding utf 8 fileencodi...