解決secureCRT中文亂碼問題

操作步驟

以下兩步:

  1. 遠程linux機器。修改環境變量LANG。例如在~/.bash_profile裏面添加

    [plain] view plaincopy
    1. export LANG=zh_CN.UTF8  

    重新登錄之後生效。

    現在查看一下當前設置:
    [plain] view plaincopy
    1. myname@myhost~> locale  
    2. LANG=zh_CN.UTF8  
    3. LC_CTYPE="zh_CN.UTF8"  
    4. LC_NUMERIC="zh_CN.UTF8"  
    5. LC_TIME="zh_CN.UTF8"  
    6. LC_COLLATE="zh_CN.UTF8"  
    7. LC_MONETARY="zh_CN.UTF8"  
    8. LC_MESSAGES="zh_CN.UTF8"  
    9. LC_PAPER="zh_CN.UTF8"  
    10. LC_NAME="zh_CN.UTF8"  
    11. LC_ADDRESS="zh_CN.UTF8"  
    12. LC_TELEPHONE="zh_CN.UTF8"  
    13. LC_MEASUREMENT="zh_CN.UTF8"  
    14. LC_IDENTIFICATION="zh_CN.UTF8"  
    15. LC_ALL=  
    16. myname@myhost~>  
  2. 本地windows機器。修改SecureCRT的設置。找到“選項”->“會話選項”->“外觀”:
    *    字符編碼設置爲utf-8。
    *    字體設置,選擇中文字體,例如新宋體。

設置完成。然後測試一下。

基本原理

首先,同一種語言,可以使用不同的編碼。例如,中文windows的系統默認字符集是cp936,基本上等同gbk。參考 http://zh.wikipedia.org/wiki/GBK 。
例如有兩個文件。文件名分別爲“我的分析1.txt”和“我的分析2.txt”。但是文件名(不是文件內容)的編碼格式不同。

“我的分析1.txt”的UTF-8編碼爲

[plain] view plaincopy
  1. e68891 e79a84 e58886 e69e90 31 2e 74 78 74  
  2.   我       的     分      析  1  .  t  x  t  


   "我的分析2.txt"的gb2312(是gbk的一個真子集)編碼格式爲

[plain] view plaincopy
  1. ced2 b5c4 b7d6 cef6 32 2e 74 78 74  
  2. 我    的    分   析   2  .  t  x  t  


第二,linux shell環境下,環境變量LANG決定了本地使用的字符集(通常情況,不考慮LC_ALL等)。包括文件名和文件內容的處理。例如,由於編碼不同,運行ls命令時,上面的兩個文件名不能同時正確顯示。
在實際linux系統中,不應該如此靈活,而要固定一種文件名編碼格式。例如,linux一般默認使用utf-8編碼文件名。以下三種情況:
   1> LANG=zh_CN.UTF8,設置shell程序使用UTF8編碼處理字符。因此,
     “我的分析1.txt”能夠被正確處理,因爲是UTF-8編碼。
     “我的分析2.txt”是gb2312編碼,顯示爲亂碼。

   2> LANG=zh_CN.gb2312 或者 LANG=zh_CN.gb18030,那麼
    “我的分析1.txt”顯示爲亂碼。
    “我的分析2.txt”能夠正確處理。

   3> LANG=en,那麼ls查看,兩個文件名都不能正常顯示。

第三,SecureCRT客戶端的編碼設置要與遠程linux的編碼設置一致,纔可以正確顯示字符。


補充說明

  1. SecureCRT和遠程linux同時都使用gb2312編碼,也沒有問題。在這種情況下,字符都按照gb2312進行處理。但是,筆者在自己的windows上利用網絡鄰居查看遠端的linux samba server時,看到的gb2312中文文件名是亂碼。而用UTF-8就沒有問題。儘管通過設置samba能夠解決,但還是建議統一用默認的UTF8格式,比較保險。
  2. VIM正確顯示和輸入中文的設置。編輯~/.vimrc,添加下面兩行
    [plain] view plaincopy
    1. let &termencoding=&encoding   
    2. set fileencodings=ucs-bom,utf-8,gbk  
    這樣設置之後,utf-8和gb2312都能正確處理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章