模块输出的数据类型

时间:2012-09-03 13:46:47

标签: html perl module ascii

我有一个脚本,我在各种文本上运行,以将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 $_;

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

1 个答案:

答案 0 :(得分:3)

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

如果您不想以Unicode输出,至少您的Perl脚本应使用UTF-8编码。要通知脚本顶部的use utf8 perl解释器。

然后使用如下编码层打开输入文件:

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

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

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

您还可以使用Encode module将字节字符串转换为unicode,反之亦然。有关在Perl中使用Unicode的详细信息,请参阅此excellent question

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