關於亂碼的種種問題
大家都知道亂碼就是字符集設置問題,所以我們需要清楚關於字符集的幾個概念。
www.2cto.com
GB2312:早期的中文字符集國標,字庫很小,不建議使用。
GBK:微軟為彌補gb2312的不足搞出來的大字符集,是gb2312的超集,也是windows默認的字符集,幾乎是事實標准。
GB18030:大字符集的國標,比GBK多一些字,但在編碼定義上與GBK有少許不同,一般可以認為他們是兼容的。
IBM-eucCN:IBM的中文字符集,AIX默認,與GBK基本兼容,但字要少一點。
UTF8:最全的字符集,用這個任何生僻字都可以處理,推薦使用。
CP936:Code Page 936,windows內中文語言的代碼頁,早期被映射到gb2312,現在被映射到gbk。
下面我們以編輯一個utf8文件為例,說明跟字符集設置相關的因素。
要處理utf8文件,那麼在讀寫的所有環節我們都應該使用utf8,避免程序自動轉碼出現亂碼。
1、設置當前環境字符集為UTF8
首先使用locale charmap命令檢查當前字符集。如果不是utf8則用locale -a列出系統當前可用字符集,找到包含utf8的那一項,例如ZH_CN.UTF-8,然後export LANG=ZH_CN.UTF-8 修改LANG的環境(注意區分大小寫),然後用locale charmap命令再次檢查,多數情況下這樣就ok了。
如果字符集沒有改過來或變成了其他的,使用locale命令檢查詳細的語言設置,這時會發現LC_ 開頭的一些環境變量不是utf8,手工unset或export為utf8.
www.2cto.com
2、設置終端軟件的字符集
a) Putty: window → Translation → Remote character set 改為 UTF-8,也可以保存在session裡面。
b) Xshell:Terminal → Translation → Encoding 改為 UTF-8,也可以通過工具欄上的 Encoding 圖標快速切換,
推薦大家使用xshell作為終端。
c) SecureCRT:Terminal → Appearance → character encoding 改為UTF-8.
這時我們已經可以通過cat查看utf8文件或者通過 cat > testfile 寫入utf8數據到文件裡面。
但如果通過vim編輯,還需要修改vim的環境變量。
3、VIM的設置
vim ~/.vimrc ,設置 set fileencodings=utf-8 (指定vim以utf8編碼打開文件) 和 set encoding=utf-8 (指定vim以utf8編碼輸出到終端)
這樣我們就可以使用vim編輯utf8文件了,其他字符集也與這類似。但是每次修改這些比較麻煩,如果不包含生僻字,我們可以用iconv -f utf8 -t gb18030 filename 將utf8文件轉換成gb18030處理。