Shell|Mac OS批量文件编码转换工具

#教程 #Shell #Mac #工具 #Mac [字体 ··]

前言

本来想查看 win 电脑上的一些源码,奈何在 Mac 上都乱码了,于是网上搜集了一些解决办法,网上多数都是针对单文件的,而我的源码文件是比较多的,因此写了个脚本进行批量处理,我先介绍单文件编码转换方法,最后放上批量转换的脚本。

单文件编码转换

第一种,直接使用 vi 编辑器调整编码方法。输入以下命令。

1:set fileencoding=utf-8

「推荐」第二种,使用iconv命令(Mac 有,未测其他系统)。

1# 格式
2iconv -f 原始文件格式 -t 转换格式 文件 > 转换后的文件
3# 例子
4iconv -f GBK -t UTF-8 ./util.cpp > ./util.cpp.utf8

第三种,这种方法属于部分编码转换,可忽略,转换 dos 系统文件到 unix 系统文件,将换行符CR+LF转换为LF 。命令可能需要安装。

1# dos格式转unix格式
2dos2unix filename
3# 反过来
4unix2dos filename

批量转换

命令只能对单个文件转换,此脚本对多个文件进行编码转换,默认进行递归扫描,默认 GBK 转 UTF-8(不符合需修改脚本)。

测试系统:mac os

测试效果图:

截屏2021-09-20 下午8.26.32

截屏2021-09-20 下午8.24.58

 1#!/bin/sh
 2
 3# 获取文件
 4# 可以将ls替换为find精确查找文件
 5files=`find ${PWD} -type f`
 6
 7# 当前脚本文件
 8current_file=${PWD}/re_encode.sh
 9
10echo "current file: ${current_file}"
11echo "re-encode file list:"
12
13for f in ${files}
14do
15    if [ ${f} != ${current_file} ]
16    then
17        echo "${f}"
18
19        # iconv -f 原始文件格式 -t 转换格式 <文件>
20        iconv -f GBK -t UTF-8 "${f}" > "$f.utf8encode"
21
22        rm -f "${f}"
23    fi
24done
25
26# 已编码文件
27encode_files=`find $PWD -type f -name "*.utf8encode"`
28
29for f in ${encode_files}
30do
31   new_name=`echo $f | sed "s/.utf8encode//g"`
32   mv "${f}" "${new_name}"
33done
34
35echo "re-encode OK :-)"

食用步骤:

第一步,复制脚本到编码转换的文件夹,命名re_encode.sh

注意:

  • 默认进行递归扫描,对文件夹本文件外所有文件进行编码转换,建议将要转换的放在一个文件夹内。
  • 默认是 GBK 转 UTF-8,其他类型需要修改脚本
  • 在执行脚本前应该将原文件备份一份,以免出现意外,命令:cp -r source target_bak

第二步,执行脚本,命令如下:

1sh re_encode.sh

总结

  • 在这个过程中我们用了很多命令,或者说很多程序,在日常编程中也会遇到编解码,尤其是网络通信,例如:对入栈协议的解析(http、websocket);

  • 编码转换的原理是对源文件按照原先的编码读出,然后按照目标编码写出,Java 字符串有 api 可以完成这个过程,感兴趣的可以尝试尝试。

  • 编码的转换后通常会改变文件的大小,例如 GBK 的转换为 UTF-8 变大。

(over)


博客没有评论系统,可以通过 邮件 评论和交流。 Top↑