因为:
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!!!!