utf8编码转换脚本
utf8编码转换脚本
  差不多去年的这个时候吧,由于项⽬组的编码从GBK转向UTF-8,让我来负责转换所有的源⽂件,当时frank给了我⼀个转换的脚本,可以过滤⽂件类型来转换,由于是frank⾃⼰使⽤的⼯具,所以也没怎么注意容错,基本上可以理解成是对某些类型的⽂件使⽤iconv -f gbk -t utf-8 这样的命令来转换。后来发现悲剧了,原因是有⼀些⽂件已经是utf-8编码了,结果在强转了⼀次,就乱码了,因为只有⼏个⽂件乱码,所以⼀开始还没注意到,直到后来发现的时候,⼜得⼀个⼀个重新转回去,所以还是挺⿇烦的。
  最近在⽤⼀个公共组件的时候,发现其提供的都是gbk编码的,所以想着⼲脆还是写⼀个脚本来完成这件事情吧,这次吸取了上次的教训,⾸先会⽤file来判断下⽂件的编码是什么编码的(当前只判断gbk和utf-8),然后根据不同的类型,来设置不同的转换选项。默认只转换当前⽂件夹下的所有.cpp和.h⽂件,当然,路径和⽂件类型,可以分别⽤-f和-t的参数传进去。当然,如果你发现有什么没有考虑到的地⽅,还请斧正,谢谢啦。
#!/bin/bash
file_type_list="cpp h"
file_path="."
#-f:⽂件名或者⽬录名  -t: ⽂件类型
#如果不传⼊参数,默认⽬录为当前⽬录,默认转换⽂件类型为.h .cpp
#example:covert_to_utf8 -f . -t "cpp h"
while getopts "t:f:" arg #选项后⾯的冒号表⽰该选项需要参数
do
case $arg in
f)
echo"f's arg:$OPTARG"
file_path=$OPTARG
;;市场营销学什么
t)
echo"t's arg:$OPTARG"
file_type_list=$OPTARG
;;
)
echo"unkonw argument"
exit 1
lol ez出装;;
esac
done
echo"file_type=" $file_type_list "file_path=" $file_path
#如果是普通⽂件或者⽬录才进⾏查、转换,其他情况,不转换
if [  -f $file_path  -o  -d $file_path  ];
then
echo"Begin to Convert $file_path from GBK "
else
echo" $file isn't a file or directory,can't convert! "
exit;
fi
#到普通⽂件,然后转换这些⽂件
all_file=`find $file_path -type f`;
for file in $all_file;
do
file_type=${file##*.}
#echo $file $file_type;
if [[ "$file_type_list" != *"$file_type"* ]];
then
echo"$file_type not in $file_type_list"
continue;
fi
file_encoding=`file $file | awk -F : '{print $2}' | awk'{print $1}'`
#GBK
if [ $file_encoding == "ISO-8859" ];
then
original_encoding="gbk"
#ASCII or UTF-8
elif [ $file_encoding == "ASCII" -o $file_encoding == "UTF-8" ];
then
古建筑保护echo"$file encoding $file_encoding is ok, not need convert"
continue;
#未定义的编码
else
echo"$file error encoding $file_encoding, can't convert"
continue;
fi
黄河壶口瀑布图片
iconv -f $original_encoding -t utf-8 $file > $file"_tmp"    #判断是否转换成功
if [ $? != 0 ];
元旦祝福语 简短独特then
echo"covert $file failed!"
continue;
fi
mv $file"_tmp" $file
echo"convrt $file success!"
done外墙外保温
echo"All file convert done!"

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。