Linux系統中關於文件編碼以及編碼的轉換

 Windows中默認的文件格式是GBK(gb2312),當然也可以保存爲UTF-8的,最簡單的方法是用記事本的“另存爲”就可以做到。 

爲了與windows兼容,SecureCRT中文件編碼的默認配置是”Default”,其實也就是GBK。如果我們將其更改爲了”UTF-8″,那麼我們查看從windows中scp過去的GBK文件就會變成亂碼,需要進行轉換,比較麻煩。 

不過有時候我們也需要進行編碼的轉換,比如這次我這次在建立cacti的模板的時候使用了中文,apache默認是UTF-8的編碼,所以記錄到mysql數據庫中的就是UTF-8的編碼了(奇怪的是,在mysql中使用”set names utf-8″看不到正確的中文,需要使用”hex()”函數來看二進制,數一下字符數量,看是不是utf-8…..)。而當我使用批量添加主機的腳本來添加新服務器信息到數據庫後,發現在網頁中出現了亂碼。原因是在cli中使用腳本的話,中文是使用GBK的格式保存到數據庫中的。於是變成了很鬱悶的情況,無論將瀏覽器編碼設置爲”UTF-8″還是”GB2312″,總會有一部分中文是亂碼的。 

解決的方法,不是將原來的模板的中文都轉換成gb2312,就是要將以後添加的主機信息裏面的中文轉換成UTF-8。因爲我比較喜歡UTF-8一點,所以我決定用後一種方法。 

linux裏面轉換編碼的方法很多,google了一下,一般的人都是用”iconv”命令來進行轉換。但是由於我需要在腳本里面判斷文件的編碼,”iconv”就不太適用。其實Linux裏面還有另一個能進行編碼轉換,並比”iconv”功能強大的”enca”。 

debian中的安裝: 

aptitude install enca 

使用方法: 

enca -L zh_CN file 檢查文件的編碼 

enca -L zh_CN -x UTF-8 file 將文件編碼轉換爲"UTF-8"編碼 

enca -L zh_CN -x UTF-8 < file1 > file2 如果不想覆蓋原文件可以這樣 

除了有檢查文件編碼的功能以外,”enca”還有一個好處就是如果文件本來就是你要轉換的那種編碼,它不會報錯,還是會print出結果來,而”iconv”則會報錯。這對於腳本編寫是比較方便的事情。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章