同步更新 微信公众号【爱写代码的小任】 欢迎关注
背景
在最近的工作中, 牵涉到老项目改造, 因为老项目通常都是GBK或者 ISO-8859-1等编码,通过Idea工具,一个一个替换耗时费力, 这个时候有没有找到更靠谱的工具, 所以这边写一个小工具, 能够快速批量把项目中的Java文件,Jsp文件等转换成UTF-8
操作
1. 开发思路
- 递归函数
- 转换编码命令(mac下有一个iconv)
- 测试
2. 脚本 convert_gbk_utf8.sh
#!/bin/bash
# 指定源目录
SOURCE_DIR="./src/main/webapp"
# 遍历源目录下所有.java文件
function convert_to_utf8() {
local file="$1"
encoding=`file -I ${file} | awk -F= '{print $2}'`
echo "encoding: $encoding"
if [[ "$encoding" != *"utf-8"* ]]; then
# 执行转换,输出为.utf8.txt文件 如果直接用iconv -f UTF-8 -t UTF-8 "$file" > "$file" 会导致文件内容被清空
iconv -f UTF-8 -t UTF-8 "$file" > "${file}.utf8.txt"
# 所以要将utf8.txt文件重命名为原文件名
mv "${file}.utf8.txt" "${file}"
else
echo "The file is already in UTF-8 encoding."
fi
}
# 递归函数处理目录下的所有文件
function recursive_convert() {
for entry in "$1"/*; do
if [ -d "$entry" ]; then
recursive_convert "$entry"
elif [ -f "$entry" ]; then
# 临时过滤jsp文件
if [[ "$entry" == *.jsp ]]; then
convert_to_utf8 "$entry"
fi
fi
done
}
recursive_convert $SOURCE_DIR
3. 测试
# 执行的时候,可以把项目中 SOURCE_DIR 替换成实际的文件目录
sh convert_gbk_utf8.sh
总结
虽然file命令能提供一定的编码猜测能力,但它并不能保证对所有文件编码都准确无误;而iconv工具也受限于其支持的编码范围,对于某些特殊或未知编码可能无法成功转换。
因此,在操作之前,请做好文件备份。欢迎一起学习。
关注我,实时获取我的更新动态,和我一起讨论