Java 工程批量编码转换,从GBK到UTF-8

完整命令:

find src -name *.java -exec sh -c "cp {} {}.gbk; iconv -f GBK -t UTF8 -c {}.gbk > {}; rm {}.gbk" \;

(适用于Mac或者Linux,Cygwin下应该也可以)

尝试过程

前几天有一个需求,希望把一个测试工具工程从GBK批量转换到UTF-8,搜了很多工具,一直没有找到很好用的。

网上搜索到的大部分都是下面这个命令:

find *.py -exec sh -c "iconv -f GB18030 -t UTF8 {} > {}.py" \;

这个命令可以解决把一个文件,从-f编码转换到-t编码,并且另存为另外一个文件,我更希望能够直接覆盖原文件,所以改成下面这样:

find *.py -exec sh -c "iconv -f GB18030 -t UTF8 {} > {}" \; // 去掉了 .py

但是发现目标文件变成空的了(猜测是iconv转码IO如果同一个文件,会有读写冲突问题)。
想了一个策略,先把原文件复制一份,然后读取备份文件,转码后保存到原文件中,并删除冗余的备份文件。命令行如下:

find src -name *.java -exec sh -c "cp {} {}.gbk; iconv -f GBK -t UTF8 -c {}.gbk > {}; rm {}.gbk" \;

批量转码成功,一共100个文件左右,验证OK。

建议:最好结合svn或者git版本管理软件进行转码迁移,过程中有问题可以随时reset或者revert回去,并且commit前可以使用版本管理软件自带的diff功能review转码情况。

posted on 2021-03-16 17:18  小小鸟儿!  阅读(359)  评论(0编辑  收藏  举报