如何使用 *nix 命令行工具将多个文件转换为 UTF-8 编码?

jas*_*son 49 linux character-encoding utf-8

可能的重复:
用于编码或行尾的批量转换文件

我有一堆文本文件,我想将它们从任何给定的字符集转换为 UTF-8 编码。

是否有任何命令行工具或 Perl(或您选择的语言)单行程序可以用来批量执行此操作?

Vin*_*vic 57

iconv 确实在许多字符编码之间进行转换。所以添加一点 bash 魔法,我们可以写

for file in *.txt; do
    iconv -f ascii -t utf-8 "$file" -o "${file%.txt}.utf8.txt"
done
Run Code Online (Sandbox Code Playgroud)

这将运行iconv -f ascii -t utf-8到结尾的文件.txt,发送重新编码的文件具有相同名称的文件,但在结尾.utf8.txt代替.txt

这并不是说这实际上会对您的文件做任何事情(因为 ASCII 是 UTF-8 的子集),而是回答您关于如何在编码之间进行转换的问题。

  • 我刚刚用 iconv(GNU libiconv 1.11)测试了这个,它没有添加 BOM。我的理解是,如果输入中存在一个 BOM,iconv 只会添加一个 BOM,而它不会是 ASCII。BOM 有问题,UTF-8 不需要。 (6认同)
  • 您应该引用 var $i,以便处理带有空格的文件名。 (2认同)
  • 如果您的 iconv 版本不支持 -o 参数,您可以直接将其替换为 >> 以使用 shell 重定向。 (2认同)