macOS 下批量转换 TXT 文件编码(GBK 转 UTF-8)
以前收藏了很多 txt 书籍小说,今天整理的发现在 macOS 下 GBK 编码的 txt 文件无法使用预览功能。
熟悉终端(Terminal)的用户可以使用 iconv 命令转换一下文本文件的编码格式。
不熟悉的话,可以使用 Sublime/VSCode 之类的编辑器(程序员常用)打开 TXT 文件,编辑器会自动适配编码展示中文,注意此时不要保存,要复制,然后打开一个新的窗口粘贴进去保存为新文件。
下面来说一下使用终端程序怎么处理。
命令参考:
iconv -f 原编码 -t 新编码 原文件地址 > 新文件地址
举个例子:
在 macOS 上无法预览或打开为乱码的 TXT 文件,大都是 GBK 编码。在 Windows 上查看是没有问题的。我们需要转成 UTF-8 编码,才能在 mac 上用空格键直接预览。
- 打开终端,进入目标文件所在的目录(假设在 /Users/你的用户名/Downloads 目录);
- 执行 iconv -f GB18030 -t utf-8 aaa.txt > bbb.txt
- 查看 bbb.txt 是否正常。
cd ~/Downloads
iconv -f GB18030 -t utf-8 aaa.txt > bbb.txt
就可以了。
PS:GB18030 可以认为是 GBK 的升级版,多了五万多字和符号,用 GBK 应该也没问题。
批量转换的办法
由于我的文件太多,于是写了一个脚本,用于批量将 GBK 编码转换为 UTF-8,这个脚本基于系统自带的 iconv 命令,所以在 Linux 下也能跑。
重要提醒:建议先备份原始的 txt 文件,毕竟万一脚本出错把原始文件给破坏了就不好了。
将以下脚本保存为 converter.sh 文件,保存到工作目录(比如我的是 /Users/tony/demo/txt/converter.sh)
#!/bin/bash
src_dir=$1
dest_dir=./output/
if [ ! -d "$dest_dir" ]; then
mkdir -p "$dest_dir"
fi
for file in $src_dir/*
do
if [[ $file =~ .*\.txt$ ]]; then
filename=$(basename "$file" .txt)
new_filename="${filename}-utf8.txt"
iconv -f gbk -t utf-8 "$file" > "$dest_dir/${new_filename}"
fi
done
然后打开终端,进入工作目录:
cd /Users/tony/demo/txt;
bash converter.sh /path/to/your/txt/files/dir
将 /path/to/your/txt/files/dir 替换成你的 txt 书籍所在目录,执行命令即可。
PS: 需要注意的是,脚本仅支持单个目录,不支持多级子目录。
转换过程中部分文件会报错:/path/to/file.txt:260:244: cannot convert,这可能是部分字符引起的错误,笔者没有深究,因为实测不影响最终结果。
最终在 /Users/tony/demo/txt 目录下生成一个 output 目录,转换后的 txt 文件都在这里,并且都加上了 -utf8 标识。
最后说明一下,本文的批量转换脚本,是由 Claude.AI (类似于 ChatGPT 的对话式AI)生成的。