操作步驟
以下兩步:
- 遠程linux機器。修改環境變量LANG。例如在~/.bash_profile裏面添加
- export LANG=zh_CN.UTF8
重新登錄之後生效。
現在查看一下當前設置:
- myname@myhost~> locale
- LANG=zh_CN.UTF8
- LC_CTYPE="zh_CN.UTF8"
- LC_NUMERIC="zh_CN.UTF8"
- LC_TIME="zh_CN.UTF8"
- LC_COLLATE="zh_CN.UTF8"
- LC_MONETARY="zh_CN.UTF8"
- LC_MESSAGES="zh_CN.UTF8"
- LC_PAPER="zh_CN.UTF8"
- LC_NAME="zh_CN.UTF8"
- LC_ADDRESS="zh_CN.UTF8"
- LC_TELEPHONE="zh_CN.UTF8"
- LC_MEASUREMENT="zh_CN.UTF8"
- LC_IDENTIFICATION="zh_CN.UTF8"
- LC_ALL=
- myname@myhost~>
- 本地windows機器。修改SecureCRT的設置。找到“選項”->“會話選項”->“外觀”:
* 字符編碼設置爲utf-8。
* 字體設置,選擇中文字體,例如新宋體。設置完成。然後測試一下。
基本原理
首先,同一種語言,可以使用不同的編碼。例如,中文windows的系統默認字符集是cp936,基本上等同gbk。參考 http://zh.wikipedia.org/wiki/GBK 。
例如有兩個文件。文件名分別爲“我的分析1.txt”和“我的分析2.txt”。但是文件名(不是文件內容)的編碼格式不同。
“我的分析1.txt”的UTF-8編碼爲
- e68891 e79a84 e58886 e69e90 31 2e 74 78 74
- 我 的 分 析 1 . t x t
"我的分析2.txt"的gb2312(是gbk的一個真子集)編碼格式爲
- ced2 b5c4 b7d6 cef6 32 2e 74 78 74
- 我 的 分 析 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的編碼設置一致,纔可以正確顯示字符。
補充說明
- SecureCRT和遠程linux同時都使用gb2312編碼,也沒有問題。在這種情況下,字符都按照gb2312進行處理。但是,筆者在自己的windows上利用網絡鄰居查看遠端的linux samba server時,看到的gb2312中文文件名是亂碼。而用UTF-8就沒有問題。儘管通過設置samba能夠解決,但還是建議統一用默認的UTF8格式,比較保險。
- VIM正確顯示和輸入中文的設置。編輯~/.vimrc,添加下面兩行
- let &termencoding=&encoding
- set fileencodings=ucs-bom,utf-8,gbk