相信大家在平时的跨平台编程中碰到过文件编码问题,比如在Windows代码字符编码方式是GB2312,然而转到Linux却只支持utf-8,虽然对代码部分没啥影响,但是很多中文注释部分,却一片乱码,很让人讨厌。如果一个一个文件处理,转换再另存为,很麻烦,下面就介绍一种使用shell脚本来批量转换文件,其中使用到iconv工具。
转换工具iconv
首先让我们来认识一下iconv工具,iconv命令可以将一种已知的字符集文件转换成另一种已知的字符集文件。支持的编码方式有:Unicode相关编码,如UTF-8、UTF-16等等,各国采用的ANSI编码,其中包括GB2312、BIG5等中文编码方式。[^1]
iconv [选项…] [文件…]
| 参数 | 说明 |
|---|---|
| -f, --from-code=NAME | 原始文本编码 |
| -t, --to-code=NAME | 输出文本编码 |
| -l, --list | 列出所有已知的编码集 |
| -c | 输出文件中省略掉无效字符 |
| -o, --output=FILE | 输出文件名 |
| -s, --silent | 不输出警告 |
| -?, --help | 帮助 |
| -V, --version | 程序版本 |
举例:
iconv -f gb2312 -t utf-8 gb.txt > utf8.txt
将gb里的编码从GB2312转化成UTF-8 并重定向到utf8.txt
转换脚本
将输入文件夹的所有的GB2312编码的cpp,h,c文件转换为utf-8编码文件
#!/bin/bash
filelist=$(find $1 -name "*.cpp" -o -name "*.h" -o -name "*.c")
for file in $filelist
do
echo $file
iconv -f gb2312 -t utf-8 $file > tmp
if [ $? -eq 0 ]
then
mv tmp $file
fi
done
小结
本文介绍一种shell下使用iconv工具批量转换文件编码的方法。
参考文件
[^1] : https://baike.baidu.com/item/iconv/524310?fr=aladdin
1100

被折叠的 条评论
为什么被折叠?



