Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取文件会中断Perl中的编码_Perl_Encoding_Escaping - Fatal编程技术网

读取文件会中断Perl中的编码

读取文件会中断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

我有一个用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-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坏了,所以就解决了:)