shell 批量转换文件编码

相信大家在平时的跨平台编程中碰到过文件编码问题,比如在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

你可能感兴趣的:(Linux)