1

我有几个文档需要从 ISO-8859-1 转换为 UTF-8(当然没有 BOM)。这就是问题所在。我有很多这样的文档(它实际上是文档的混合,一些 UTF-8 和一些 ISO-8859-1),我需要一种自动转换它们的方法。不幸的是,我只安装了 ActivePerl,并且对该语言的编码知之甚少。我可能能够安装 PHP,但我不确定,因为这不是我的个人计算机。

如您所知,我使用 Scite 或 Notepad++,但两者都不能正确转换。例如,如果我打开一个包含字符“ž”的捷克文文档并转到 Notepad++ 中的“转换为 UTF-8”选项,它会错误地将其转换为不可读的字符。

有一种方法可以转换它们,但这很乏味。如果我打开带有特殊字符的文档并将文档复制到 Windows 剪贴板,然后将其粘贴到 UTF-8 文档中并保存,就可以了。对于我拥有的文件数量来说,这太乏味了(打开每个文件并复制/粘贴到新文件中)。

有任何想法吗?谢谢!!!

4

3 回答 3

5

如果包含字符“ž”,则编码肯定不是 ISO-8859-1(“Latin 1”),而可能是 CP1252(“Win Latin 1”)。处理 UTF8、ISO-8859-1 和 CP1252 的混合(甚至可能在同一个文件中)正是Encoding::FixLatin Perl 模块的设计目的。

您可以通过运行以下命令从 CPAN 安装模块:

perl -MCPAN -e "install 'Encoding::FixLatin'"

然后,您可以编写一个使用 Encoding::FixLatin 模块的简短 Perl 脚本,但还有更简单的方法。该模块带有一个名为的命令,该命令fix_latin在标准输入上采用混合编码并在标准输出上写入 UTF8。所以你可以使用这样的命令行来转换一个文件:

fix_latin <input-file.txt >output-file.txt

如果您正在运行 Windows,则 fix_latin 命令可能不在您的路径中,并且可能没有通过 pl2bat 运行,在这种情况下您需要执行以下操作:

perl C:\perl\bin\fix_latin.pl <input-file.txt >output-file.txt

需要为您的系统调整确切的路径和文件名。

在 Linux 系统上运行fix_latin一大堆文件是微不足道的,但在 Windows 上,您可能需要使用 powershell 或类似工具。

于 2010-04-18T02:20:55.567 回答
1

我不确定这是否是对您的特定问题的有效答案,但是您看过GNU iconv 工具吗?它相当普遍。

于 2010-04-17T00:17:40.330 回答
1

如果您可以访问 cygwin 或能够下载几个常用的 *nix 工具(您需要 bash、grep、iconv 和文件,所有这些都可以通过例如gnuwin32用于 Windows ),您可能能够编写一个相当简单的 shell 脚本来完成这项工作。

该脚本大致如下所示:

for f in *;
do
   if file $f | grep 'ISO-8859' > /dev/null;
   then
      cat $f | iconv -f iso-8859-1 -t utf-8 > $f.converted;
   else
      echo "Not converting $f"
   fi;
done;

不过,您需要测试这些步骤,例如,我不确定“文件”对于 ISO-8859 文档的确切含义。

于 2010-04-17T00:21:18.720 回答