读取文件会中断Perl中的编码
我有一个用Perl读取html文件的脚本,它可以工作,但它破坏了编码 这是我的脚本:读取文件会中断Perl中的编码,perl,encoding,escaping,Perl,Encoding,Escaping,我有一个用Perl读取html文件的脚本,它可以工作,但它破坏了编码 这是我的脚本: use utf8; use Data::Dumper; open my $fr, '<', 'file.html' or die "Can't open file $!"; my $content_from_file = do { local $/; <$fr> }; print Dumper($content_from_file); <span class="previews-c
use utf8;
use Data::Dumper;
open my $fr, '<', 'file.html' or die "Can't open file $!";
my $content_from_file = do { local $/; <$fr> };
print Dumper($content_from_file);
<span class="previews-counter">Počet hodnotení: [%product.rating_votes%]</span>
<a href="#" title="[%L10n.msg('Zobraziť recenzie')%]" class="previews-btn js-previews-btn">[%L10n.msg('Zobraziť recenzie')%]</a>
<span class=\"previews-counter\">Po\x{10d}et hodnoten\x{ed}: [%product.rating_votes%]</span>
<a href=\"#\" title=\"[%L10n.msg('Zobrazi\x{165} recenzie')%]\" class=\"previews-btn js-previews-btn\">[%L10n.msg('Zobrazi\x{165} recenzie')%]</a>
使用utf8;
使用数据::转储程序;
打开my$fr,“您可以使用perl的默认编码打开文件:
open my $fh, '<', ...;
不过,你还没做完。现在您有了一个可能已解码的字符串,您希望将其输出。你又有同样的问题了。标准输出文件句柄的编码必须与您试图打印的内容相匹配。如果您已经将终端(或任何东西)设置为期望UTF-8,那么您需要实际输出UTF-8。解决此问题的一种方法是使标准文件句柄使用UTF-8
:
use open qw(:std :utf8);
您有使用utf8
,但这仅表示程序文件的编码
我在后面为Perl和Unicode编写了一本更长的入门书。StackOverflow问题有很多好的建议。您可以使用perl的默认编码打开文件:
open my $fh, '<', ...;
不过,你还没做完。现在您有了一个可能已解码的字符串,您希望将其输出。你又有同样的问题了。标准输出文件句柄的编码必须与您试图打印的内容相匹配。如果您已经将终端(或任何东西)设置为期望UTF-8,那么您需要实际输出UTF-8。解决此问题的一种方法是使标准文件句柄使用UTF-8
:
use open qw(:std :utf8);
您有使用utf8
,但这仅表示程序文件的编码
我在后面为Perl和Unicode编写了一本更长的入门书。StackOverflow问题有很多很好的建议。你在什么地方使用过Data::Dumper吗?@ernix是的,为什么?我刚刚试着运行你的脚本。请尝试打开我的$fr',从阅读开始,我通常建议使用将文件读入字符串。您是否在某处使用了Data::Dumper
?@ernix是的,为什么?我刚刚尝试运行您的脚本。尝试打开我的$fr',从读取开始我通常也建议使用将文件读入字符串。更具体地说:标准输出文件句柄的编码必须与您试图打印的内容匹配。通常,这是一个需要UTF-8的终端。不要使用:utf8
层,使用:encoding(UTF-8)
。我将open语句更改为打开我的$fr,'它没有损坏。这是Data::Dumper的一个特性@Grinnz已经告诉您不要使用Data::Dumper。你为什么不打印字符串呢?除了调试之外,您使用Data::Dumper还有什么原因吗?@tinita哦,没关系,只是Dumper坏了,所以就解决了:)更具体地说:标准输出文件句柄的编码必须与您试图打印的内容相匹配。通常,这是一个需要UTF-8的终端。不要使用:utf8
层,使用:encoding(UTF-8)
。我将open语句更改为打开我的$fr,'它没有损坏。这是Data::Dumper的一个特性@Grinnz已经告诉您不要使用Data::Dumper。你为什么不打印字符串呢?除了调试之外,您使用Data::Dumper还有什么原因吗?@tinita哦,没关系,只是Dumper坏了,所以就解决了:)