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尾碼的檔案也用同樣的辦法進行轉碼就行了。哎,問題可算解決了。