首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Perl读取文件中断编码

用Perl读取文件中断编码
EN

Stack Overflow用户
提问于 2018-11-17 12:28:10
回答 1查看 71关注 0票数 0

我有用Perl读取html文件的脚本,它可以工作,但是它破坏了编码。

这是我的脚本:

代码语言:javascript
复制
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);

含量file.html:

代码语言:javascript
复制
<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>

读取的输出:

代码语言:javascript
复制
<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>

正如您所看到的,很多字符都是转义的,我如何读取这个文件并显示它的内容呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-17 13:49:21

使用perl的默认编码打开文件:

代码语言:javascript
复制
open my $fh, '<', ...;

如果该编码与实际编码不匹配,Perl可能会错误地翻译一些字符。如果您知道编码,请以open模式指定它:

代码语言:javascript
复制
open my $fh, '<:utf8', ...;

不过你还没说完呢。现在您有了一个可能已解码的字符串,您希望输出它。你又有同样的问题了。标准输出文件句柄的编码必须与您要打印的内容相匹配。如果您已经将终端(或任何其他)设置为期望UTF-8,则需要实际输出UTF-8。解决这个问题的一种方法是让标准的文件句柄使用UTF-8

代码语言:javascript
复制
use open qw(:std :utf8);

您有use utf8,但这只表示程序文件的编码。

我在学习Perl后面为Perl和Unicode编写了一个更长的引物。StackOverflow question 为什么现代Perl默认避免使用UTF-8?有很多好的建议。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53351265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档