Centos下文本文件格式轉碼解決
最近遇到服務器網站的目錄下的所有文件的編碼全是gb2312,直接用cat或者vim打開顯示都是亂碼,網頁顯示出來當然也全是亂碼,所以要解決怎麼把目錄下的所有文件(包括子文件夾裏的文件)由gb2312轉碼成utf-8的問題。網上一頓搜,總共用了三種方法,最後終於把問題解決了。
第一種方法是利用vi編輯器,打開需要轉碼的文件。
:set fileencoding
這樣可以查看文件當前的編碼格式。
:set fileencoding=utf-8
說這樣能把當前的文件轉碼成utf-8。但是失敗了,直接打開還是顯示亂碼,更別說瀏覽器瀏覽的頁面了。而且即使能轉碼成功,站點目錄下的文本文件那麼多,不可能一個個挨個打開然後這樣設置吧,工作量巨大。
第二種方法是利用iconv。iconv系統默認就已經安裝了的。通過命令:
Shell代碼
iconv -f gb2312 -t utf-8 abc.html
這樣確實把abc.html的編碼轉換成了utf-8。這樣是將轉換後的文本顯示在了終端上,也可以:
Shell代碼
iconv -f gb2312 -t utf-8 abc.html -o abc.html
用轉碼後的文件覆蓋原文件,畢竟這纔是最後想達到的目的。
好了,現在就可以對整個目錄下(包括子目錄下)的所有文本文件進行轉碼了:
Shell代碼
find -type f -name "*.html" -exec iconv -f gb2312 -t utf-8 {} -o {} \;
通過-exec將find命令的每個結果帶入後面iconv的{}內,轉換css和javascript文件類似。但是悲劇的是輸出很多錯誤提示。大概就是非法輸入,也就是很多html文件裏面的字符不對,用iconv轉碼出現錯誤。尋思大概不是所有的html文件的編碼都是gb2312,所以把-f gb2312這個參數去掉,變成這樣:
Shell代碼
find -type f -name "*.html" -exec iconv -t utf-8 {} -o {} \;
但是遺憾的是錯誤依舊。所有用iconv這種辦法還是行不通。
第三種方法是用enca。Centos默然沒有安裝enca,先下載然後安裝:
Shell代碼
wget http://pkgs.repoforge.org/enca/enca-1.10-1.el6.rf.x86_64.rpm
安裝:
Shell代碼
rpm -ivh enca-1.10-1.el6.rf.x86_64.rpm
enca的用法:
enca -L zh_CN file #查看file的編碼格式
enca -L zh_CN -x UTF-8 file #將file轉換成utf8的編碼格式
enca -L zh_CN -x UTF-8 file1 file2 #轉換之後存成file2文件,不覆蓋file1
好了,接下來就是將目錄下的所有文本文件轉成成utf8格式:
Shell代碼
find -type f -name "*.html" -exec enca -L zh_CN -x UTF-8 {} \;
這樣轉換以後發現只有一兩個文件顯示原文件由於未知格式轉碼失敗,其它的的html文件都轉碼成功了,哈哈。接下來就是將htm,css,js後綴的文件也用同樣的辦法進行轉碼就行了。哎,問題可算解決了。
本文來自:Linux學習教程網