Php 如何使用Perl将一组文件从ISO-8859-1转换为UTF-8?
我有几个文件需要从ISO-8859-1转换为UTF-8(当然没有BOM)。这就是问题所在。我有很多这样的文档(实际上是一个文档的混合体,一些是UTF-8,一些是ISO-8859-1),所以我需要一种自动转换它们的方法。不幸的是,我只安装了ActivePerl,对该语言的编码知之甚少。我可能可以安装PHP,但我不确定,因为这不是我的个人电脑 正如您所知,我使用Scite或Notepad++,但两者都不能正确转换。例如,如果我用捷克语打开一个包含字符“ž”的文档并转到Notepad++中的“Convert to UTF-8”选项,它会错误地将其转换为无法读取的字符 有一种方法我可以转换它们,但它是乏味的。如果我打开带有特殊字符的文档并将其复制到Windows剪贴板,然后将其粘贴到UTF-8文档并保存,就可以了。这对于我拥有的文档数量来说太单调了(打开每个文件并复制/粘贴到新文档中) 有什么想法吗?Php 如何使用Perl将一组文件从ISO-8859-1转换为UTF-8?,php,perl,utf-8,iso-8859-1,Php,Perl,Utf 8,Iso 8859 1,我有几个文件需要从ISO-8859-1转换为UTF-8(当然没有BOM)。这就是问题所在。我有很多这样的文档(实际上是一个文档的混合体,一些是UTF-8,一些是ISO-8859-1),所以我需要一种自动转换它们的方法。不幸的是,我只安装了ActivePerl,对该语言的编码知之甚少。我可能可以安装PHP,但我不确定,因为这不是我的个人电脑 正如您所知,我使用Scite或Notepad++,但两者都不能正确转换。例如,如果我用捷克语打开一个包含字符“ž”的文档并转到Notepad++中的“Conv
谢谢 我不确定这是否是对您的特定问题的有效答案,但您是否已查看了答案?这是一个相当普遍的问题。我不确定这是否是对您特定问题的有效答案,但您是否已经看过了答案?它非常普遍。如果您可以访问cygwin,或者能够下载两个常用的*nix工具(您需要bash、grep、iconv和file,所有这些工具都可以通过,比如说,用于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文档的“文件”确切含义是什么。如果您可以访问cygwin或能够下载两个常用的*nix工具(您需要bash、grep、iconv和file,所有这些工具都可以通过,例如,)在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文档的“文件”确切含义是什么。如果包含字符“ž”,则编码肯定不是ISO-8859-1(“拉丁1”),但可能是CP1252(“赢拉丁1”)。处理UTF8、ISO-8859-1和CP1252的混合(甚至可能在同一个文件中)正是Perl模块设计的目的 您可以通过运行以下命令从CPAN安装模块:
perl -MCPAN -e "install 'Encoding::FixLatin'"
然后可以编写一个使用Encoding::FixLatin模块的简短Perl脚本,但还有一种更简单的方法。该模块附带一个名为fix\u latin
的命令,该命令对标准输入采用混合编码,并对标准输出写入UTF8。因此,您可以使用如下命令行转换一个文件:
fix_latin <input-file.txt >output-file.txt
fix_拉丁输出文件.txt
如果您正在运行Windows,那么fix_拉丁语命令可能不在您的路径中,并且可能没有通过pl2bat运行,在这种情况下,您需要执行以下操作:
perl C:\perl\bin\fix_latin.pl <input-file.txt >output-file.txt
perl C:\perl\bin\fix\u latin.pl output-file.txt
确切的路径和文件名需要根据您的系统进行调整
在Linux系统上,在一大堆文件上运行
fix_-latin
很简单,但在Windows上,您可能需要使用powershell或类似的工具。如果包含字符“ž”,那么编码肯定不是ISO-8859-1(“拉丁1”),而是CP1252(“Win-latin 1”)。处理UTF8、ISO-8859-1和CP1252的混合(甚至可能在同一个文件中)正是Perl模块设计的目的
您可以通过运行以下命令从CPAN安装模块:
perl -MCPAN -e "install 'Encoding::FixLatin'"
然后可以编写一个使用Encoding::FixLatin模块的简短Perl脚本,但还有一种更简单的方法。该模块附带一个名为fix\u latin
的命令,该命令对标准输入采用混合编码,并对标准输出写入UTF8。因此,您可以使用如下命令行转换一个文件:
fix_latin <input-file.txt >output-file.txt
fix_拉丁输出文件.txt
如果您正在运行Windows,那么fix_拉丁语命令可能不在您的路径中,并且可能没有通过pl2bat运行,在这种情况下,您需要执行以下操作:
perl C:\perl\bin\fix_latin.pl <input-file.txt >output-file.txt
perl C:\perl\bin\fix\u latin.pl output-file.txt
确切的路径和文件名需要根据您的系统进行调整
在Linux系统上,跨一大堆文件运行
fix_-latin
非常简单,但在Windows上,您可能需要使用powershell或类似的工具。“ž”不是ISO-8859-1字符,而是Windows-1252中的字符。您可能正在特定于语言环境的8位编码中运行。需要更多的细节。我实际上认为文档是用ANSI编码的。我错误地在meta标记中写入了字符集设置。“ž”不是ISO-8859-1字符,但它在Windows-1252中。您可能正在特定于语言环境的8位编码中运行。需要更多的细节。我实际上认为文档是用ANSI编码的。我在meta标签中错误地写了字符集的设置。非常感谢grant!您的脚本与fix_拉丁语命令配合得非常好。我会想办法在多个文件中运行它。非常感谢格兰特!您的脚本与fix_拉丁语命令配合得非常好。我想办法在多个文件中运行它。