【实践】在Mac系统下批量更改文件编码为UTF-8

本文介绍了一个小工具,用于在Java和Jsp文件中批量转换老项目从GBK或ISO-8859-1编码到UTF-8编码,利用递归和iconv命令实现,同时提醒读者在转换前备份文件以防止数据丢失。
摘要由CSDN通过智能技术生成

同步更新 微信公众号【爱写代码的小任】 欢迎关注

背景

在最近的工作中, 牵涉到老项目改造, 因为老项目通常都是GBK或者 ISO-8859-1等编码,通过Idea工具,一个一个替换耗时费力, 这个时候有没有找到更靠谱的工具, 所以这边写一个小工具, 能够快速批量把项目中的Java文件,Jsp文件等转换成UTF-8

操作

1. 开发思路

  1. 递归函数
  2. 转换编码命令(mac下有一个iconv)
  3. 测试

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工具也受限于其支持的编码范围,对于某些特殊或未知编码可能无法成功转换。

因此,在操作之前,请做好文件备份。欢迎一起学习。

关注我,实时获取我的更新动态,和我一起讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱写代码的小任

感谢老板打赏,我将会再接再厉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值