使用 iconv 批量转换文件编码
2025-01-22 08:19:30    329 字   
This post is also available in English and alternative languages.

shell + iconv 批量将文件的编码转换为UTF-8格式。


1. 安装 iconv

1
brew install libiconv

2. 批量转换

脚本会递归扫描输入目录(及子目录)中的指定格式文件。

新建一个.sh扩展名的脚本,粘贴以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/bin/bash

# Check if the correct input parameter is provided
if [ $# -ne 1 ]; then
echo "Usage: $0 <input_directory>"
echo "Description: This script searches for subtitle files (*.srt) within the specified input directory and converts their encoding to UTF-8 if needed."
exit 1
fi

# 获取输入目录路径
input_dir="$1"

# 检查输入目录是否存在
if [ ! -d "$input_dir" ]; then
echo "错误: 输入目录 '$input_dir' 不存在。"
exit 1
fi

# 查找匹配的字幕文件并处理
find "$input_dir" -type f -iname "*.srt" -print0 | while read -d $'\0' subtitle_file; do
# 获取字幕文件的当前编码
current_encoding="$(file -b --mime-encoding "$subtitle_file")"

# 跳过已经是 UTF-8 编码的文件
if [ "$current_encoding" = "utf-8" ]; then
echo "跳过 UTF-8 文件: $subtitle_file"
continue
fi

output_file="${subtitle_file%.*}_utf8.srt"

echo "正在处理: $subtitle_file"
iconv -f "$current_encoding" -t UTF-8 "$subtitle_file" > "$output_file"
echo "转换完成: $subtitle_file"
done

echo "所有位于 '$input_dir' 的字幕文件已处理完成。"

3. 运行

然后在 Terminal 中执行以下代码即可:

1
bash /path/to/your/script.sh