1、简介
iconv命令是用来转换文件的编码方式的,比如它可以将UTF8编码的转换成GB18030的编码,反过来也行。JDK中也提供了类似的工具native2ascii。Linux下的iconv开发库包括iconv_open,iconv_close,iconv等C函数,可以用来在C/C++程序中很方便的转换字符编码,这在抓取网页的程序中很有用处,而iconv命令在调试此类程序时用得着。
2、语法
iconv -f encoding [-t encoding] [inputfile]...
3、选项
-f encoding :把字符从encoding编码开始转换。
-t encoding :把字符转换到encoding编码。
-l :列出已知的编码字符集合
-o file :指定输出文件
-c :忽略输出的非法字符
-s :禁止警告信息,但不是错误信息
--verbose :显示进度信息
-f和-t所能指定的合法字符在-l选项的命令里面都列出来了。
4、实例
列出当前支持的字符编码:
iconv -l
将文件file1转码,转后文件输出到fil2中:
iconv file1 -f EUC-JP-MS -t UTF-8 -o file2
5、shell脚本
#!/bin/sh
##
## convert file from GB2312 to UTF-8
##
path="$1"
unset opt
if [ "$2" = "force" ]; then
opt="-c -s"
fi
if [ -z "$path" ]; then
echo "nUsage: $0 <file or dir>n"
elif [ ! -e "$path" ] ; then
echo "nERROR: destination: $path does not exist.n"
fi
if [ -f "$path" ] ; then
echo "Converting $path (gbk --> utf-8) ... "
if file "$path"|grep -q UTF-8 >/dev/null ; then
echo "Already converted"
else
iconv -f gbk $opt -t utf-8 "$path" > /tmp/$$.tmp
if [ $? -eq 0 ] ; then
echo "Success"
mv -f /tmp/$$.tmp "$path"
else
echo "Failed"
fi
fi
elif [ -d "$path" ] ; then
path=`echo "$path/"|sed 's//'`
find "$path" -path "$path.*" -prune -o -type f -print|while read i
do
dir=`dirname $i`
file=`basename $i`
echo "Converting $dir/$file (gbk --> utf-8) ..."
iconv -f gbk -t utf-8 $opt "$i" > /tmp/$$.tmp 2>/dev/null
if [ $? -eq 0 ] ; then
echo "Success"
mv -f /tmp/$$.tmp "$i"
else
echo "Failed"
fi
done
fi