macOS 下解决 TXT 文件乱码问题(TXT 文件编码转换)

以前收藏了很多 txt 书籍小说,今天整理的发现在 macOS 下 GBK 编码的 txt 文件无法使用预览功能。

熟悉终端(Terminal)的用户可以使用 iconv 命令转换一下文本文件的编码格式。

不熟悉的话,可以使用 Sublime/VSCode 之类的编辑器(程序员常用)打开 TXT 文件,编辑器会自动适配编码展示中文,注意此时不要保存,要复制,然后打开一个新的窗口粘贴进去保存为新文件。

下面来说一下使用终端程序怎么处理。

命令参考:

iconv -f 原编码 -t 新编码 原文件地址 > 新文件地址

举个例子:

在 macOS 上无法预览或打开为乱码的 TXT 文件,大都是 GBK 编码。在 Windows 上查看是没有问题的。我们需要转成 UTF-8 编码,才能在 mac 上用空格键直接预览。

  1. 打开终端,进入目标文件所在的目录(假设在 /Users/你的用户名/Downloads 目录);
  2. 执行 iconv -f GB18030 -t utf-8 aaa.txt > bbb.txt
  3. 查看 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)生成的。