因爲:
iconv -f UTF-8 -t GBK file.name
iconv 的調用命令強制用戶輸入 -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!!!!