使用 iconv 自動判斷文件編碼

做項目的時候,文件編碼爲UTF-8,需要臨時轉碼到GBK,開始的時候用 iconv 來轉換,很簡單。不久之後,項目擴大,需要處理 源代碼爲 GBK 的文件,當一個GBK的文件被拿給 iconv 做轉換的時候,如果這個文件本身是GBK編碼,就會報錯,終止整個shell自動處理流程。爲什麼會這樣呢?
因爲:
iconv -f UTF-8 -t GBK file.nameiconv 的調用命令強制用戶輸入 -f 參數,即原始文件編碼,如果文件不是該編碼,則會報錯:
iconv: illegal input sequence at position 0在google上找了下,發現大家都似乎使用同一個解決方案:enca
我不太喜歡爲了這麼簡單的事情再安裝一個包,並且,經過我的查找,在項目使用的cygwin平臺,也沒有這個包可以裝,那麼,這個問題在只有 iconv 的情況下就不能解決麼?
當然是可以解決的,到目前爲止,這個項目只涉及到2種文件編碼,所以我們可以輪詢一下:
iconv -f utf8 file.name 1>/dev/null 2>/dev/null && echo 1
iconv -f gbk file.name 1>/dev/null 2>/dev/null && echo 2
或者乾脆把是否該編碼包裝成一個函數:
isEnc () {
  local temp=`iconv -f $2 $1 1>/dev/null 2>/dev/null && echo 'true'`;
  if [ "$temp" = 'true' ]; then
    return 0;
  fi;
  return -1;
}
像這樣使用:
isEnc file.name utf8 && echo 'file is utf8'
isEnc file.name gbk && echo 'file is gbk'
所以,誰說 iconv 不能做文件編碼類型識別呢?當然,還做不到自動識別文件的編碼類型,但是可以詢問一個文件是否某指定編碼類型(網上傳的很多的 enca 似乎也只能做到這一步,使用 enca -L zh_CN file 這樣的參數)
將 nerdy 進行到底!! stauren.net 就是一個 nerdy blog!! we are jerks, we are geeks, we are nerds!!!!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章