我有一个脚本,我在各种文本上运行,以将XHTML(例如ü
)转换为ASCII。例如,我的脚本以下列方式编写:
open (INPUT, '+<file') || die "File doesn't exist! $!";
open (OUTPUT, '>file') || die "Can't find file! $!";
while (<INPUT>) {
s/ü/ü/g;
}
print OUTPUT $_;
这可以按预期工作,并使用ASCII等效替换XHTML。但是,由于这经常运行,我试图将其转换为模块。但是,Perl不返回“ü”它返回分解。
如何让Perl使用ASCII等效函数返回数据(运行并打印在我的常规.pl文件中)?
答案 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.