最近使用ubuntu操作系統(客戶端)在ssh連接linux服務器的時候發現亂碼問題,但是本機查看中文顯示中文沒有問題,只是在使用終端more查看本地或遠端gbk之類中文編碼的文件時出現亂碼。折騰了挺久,終於算是搞懂了點皮毛,這裡做一點記錄。
優先級的關系:LC_ALL > LC_* >LANG
設置格式為:語言[_地域[.字符集]]
。
locale設定案列:
LANGUAGE是設置應用程序的界面語言。
LANG是優先級很低的一個變量,它指定所有與locale有關的變量的默認值。
查看所有支持的語言
cd /usr/share/i18n/locales進入目錄後執行ls命令查看。
locale -a 命令查看。
安裝字體: sudo locale-gen en_US.UTF-8
配置
在/etc/default/locale 配置文件中配置
~$ more /etc/default/locale
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
配置完需要重啟系統,如果原來LANG值en由改為zh重啟後系統會變成中文環境,菜單/設置等。
這個是系統全局的設置,也可以針對系統各個用戶修改。
客戶端就是連接使用的工具,比如我使用ubuntu去連接服務器,可以使用系統的terminal終端、也可以使用我的securecrt工具。那這時連接使用的客戶端字符集必須和服務器一致,否則在查看服務器的文件時可能出現中文亂碼。
比如下面例子:
服務器端使用的是LANG=zh_CN.gb18030編碼,客戶端使用的是utf-8編碼
客戶端terminal的編碼可以通過菜單欄的 terminal->Set Character Encoding查看,比如我的設置成了utf-8.
結果查看文件就出現了亂碼:
如果使用工具securtCRT的話,可以通過菜單欄:Options->Session Options->Appearance->Character encoding項來查看。
如果是使用客戶端遠程登陸查看遠程的文件的話,只要保證文件的編碼和客戶端的編碼格式一致即可,當然使用客戶端查看本地文件也是如此。
如果是系統產生的亂碼,比如輸入su到哪個用戶下的時候出現亂碼,那就是系統編碼和客戶端編碼要一致。
一般抓住服務端(或是文件)和客戶端編碼一致這一點,就不會出現亂碼的問題。
最後附上vim設置可以查看多種編碼文件的設置:
在文件/etc/vim/vimrc中加入如下信息:
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8
set encoding=prc
這麼vim可支持多種編碼,而輸出的客戶端只需要設置為utf-8格式即可。