0

我有一个脚本,可以在各种文本上运行以将 XHTML(例如,ü)转换为 ASCII。例如,我的脚本是按以下方式编写的:

open (INPUT, '+<file') || die "File doesn't exist! $!";
open (OUTPUT, '>file') || die "Can't find file! $!";

while (<INPUT>) {
     s/&uuml/ü/g;
}

print OUTPUT $_;

这按预期工作,并将 XHTML 替换为 ASCII 等效项。但是,由于这经常运行,我尝试将其转换为模块。但是,Perl 不返回“ü”,而是返回分解。
如何让 Perl 使用 ASCII 等价物返回数据(在我的常规 .pl 文件中运行和打印)?

4

1 回答 1

3

没有ASCII。无论如何,在实践中没有,当然也没有在美国以外的地方。我建议您指定一个包含您可能遇到的所有字符的编码(ASCII 不包含ü,它只是一个 7 位编码!)。Latin-1 是可能的,但仍然不是最理想的,所以你应该使用Unicode,最好是 UTF-8

如果你不想以 Unicode 输出,至少你的 Perl 脚本应该用 UTF-8 编码。use utf8在脚本顶部向 perl 解释器发出信号。

然后用这样的编码层打开输入文件:

open my $fh, "<:encoding(UTF-8)", $filename

输出文件也是如此。只需确保在要使用编码时指定一个编码。

您可以使用 更改文件的编码binmode,只需查看文档即可。

您还可以使用该Encode模块将字节字符串转换为 unicode,反之亦然。有关在 Perl 中使用 Unicode 的更多信息,请参阅这个出色的问题。

如果你愿意,你可以使用现有的HTML::Entities模块来处理实体解码,只关注 I/O。

于 2012-09-03T14:47:49.143 回答