unicode文本的树生成器问题



我使用HTML::TreeBuilder通过使用tree->lookdown提取url的内容,然后从lookdown方法中返回的字符串中提取文本部分。我这里的问题是,当我读到的文本,并将其写入一个文件显示为垃圾。在这方面我无法取得进展。

我的示例代码:

use HTML::TreeBuilder;
use HTML::Element;
use utf8;
$url = $ARGV[0];
$page = `wget -qO -  "$url"| tee data.txt`;
#print "iam $pagen";
my $tree = HTML::TreeBuilder->new(  );
$tree->parse_file('data.txt');
my @story = $tree->look_down(
    _tag  => 'div',
    class => 'storydescription'
);
my @title = $tree->look_down(
    _tag  => 'title'
);
open(OUT,">","story.txt") or die"Cannot open story.txt:$!n";
binmode(OUT,":utf8");
foreach my $story(@story) {
    print OUT $story->as_text;
}
close(OUT);

我已经尝试了输出文件句柄的binmode,但它是没有用的,Unicode以外的文本,如ascii字符正确打印到文件。

文档在HTML::TreeBuilder:

当你传递一个文件名给parse_file时,HTML::Parser打开它二进制模式,这意味着它被解释为Latin-1 (ISO-8859-1)。如果文件是另一种编码,如UTF-8或UTF-16,这将不会做正确的事。

一个解决方案是使用适当的:encoding自己打开文件层,并将文件句柄传递给parse_file。你可以自动化这个通过在IO::HTML中使用"html_file"来处理,这将使用HTML5编码嗅探算法自动确定合适:encoding图层并应用

相关内容

  • 没有找到相关文章

最新更新