我有几个文件我需要从ISO-8859-1转换为UTF-8(无当然BOM)。这就是虽然问题。我有这么多的这些文件(实际上是文件的混合,一些UTF-8和一些ISO-8859-1),我需要转换他们的自动方法。不幸的是我只安装了ActivePerl,不知道多少关于该语言编码。我可能能够安装PHP,但我不知道,因为这不是我个人的电脑。

只要你知道,我用赛特或记事本+ +,但两者不正确转换。例如,如果我在捷克打开文档包含字符“Z”,并转到“转换为UTF-8”选项在记事本++,它错误地将其转换为一个不可读字符。

有一个办法,我可以将它们转换,但它是单调乏味的。如果我打开带有特殊字符的文件,该文件拷贝到Windows剪贴板,然后粘贴到一个UTF-8文档并保存它,它是好的。这是太繁琐(开口的每个文件和复制/粘贴到新的文档),用于我的文档的量。

任何想法? 感谢!!!

有帮助吗?

解决方案

如果字符“Z”被包括,则编码是绝对不是ISO-8859-1(“拉丁1”),但可能是CP1252(“赢拉丁1”)。与UTF8,ISO-8859-1和CP1252(甚至可能在同一个文件)的混合处理正是在的编码:: FixLatin Perl的模块被设计用于

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

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

然后,您可以编写使用编码:: 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

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

要运行跨一大堆文件fix_latin将是微不足道的Linux系统上,但在Windows上你可能需要使用PowerShell的或相似的。

其他提示

我不知道这是否是一个有效的回答特定的问题,但你看了的 GNU工具的iconv ?这是相当普遍可用的。

如果您有机会获得在cygwin或能够下载几个常见的* nix工具(你需要的bash,grep的,的iconv和文件,所有这些都通过,也就是说,的的GnuWin32 ),你也许可以写一个相当简单的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文件。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top