歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux基礎知識

linux系統各種亂碼問題

linux系統亂碼問題

最近使用ubuntu操作系統(客戶端)在ssh連接linux服務器的時候發現亂碼問題,但是本機查看中文顯示中文沒有問題,只是在使用終端more查看本地或遠端gbk之類中文編碼的文件時出現亂碼。折騰了挺久,終於算是搞懂了點皮毛,這裡做一點記錄。

服務端字符編碼

  • 查看locale設置

優先級的關系:LC_ALL > LC_* >LANG

設置格式為:語言[_地域[.字符集]]
locale設定案列:

  1. 設定LC_ALL= zh_CN.XXXX,或LANG=zh_CN.XXXX,中文系統(菜單等都會變成中文)。
  2. 設定LC_CTYPE=zh_CN.XXXX,LANG=en_US.XXXX後可以輸入中文,但是系統菜單等還是英文。
  3. 什麼都不設置,那麼POSIX作為lcoale,也就是C 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格式即可。

Copyright © Linux教程網 All Rights Reserved