我有一个下载www页面的脚本,我想提取文本并以统一编码存储(UTF8会很好)。下载(UserAgent),Parsing(TreeBuilder)和文本提取似乎很好,但我不确定我是否正确保存它们。
他们在打开输出文件时不会查看例如notepad ++;原始HTML视图在文本编辑器中找到。
HTML文件通常具有 charset = windows-1256或 字符集= UTF-8
所以我想如果我能让UTF8工作,那么这只是一个重新编码的问题。这是我尝试过的一些内容,假设我有一个HTML文件保存到磁盘。
my $tree = HTML::TreeBuilder->new;
$tree->parse_file("$inhtml");
$tree->dump;
为STDOUT捕获的转储输出仅在.txt文件中正确查看 在文本编辑器中将编码切换为utf8 ...
$formatter = HTML::FormatText->new(leftmargin => 0, rightmargin => 50);
if (utf8::is_utf8($formatter->format($tree))) {
print " Is UTF8\n";
}
else {
print " Not UTF8\n";
}
结果当内容显示时显示此IS UTF8,否则显示非UTF8。
我累了
opening an file with ">" and ">:utf8"
binmode(MYFILE, ":utf8");
encode("utf8", $string); (where string is the output of formatter->format(tree))
但似乎没有任何工作正常。
那里的任何专家都知道我失踪了什么?
提前致谢!
答案 0 :(得分:2)
此示例可以帮助您找到所需内容:
use strict;
use warnings;
use feature qw(say);
use HTML::TreeBuilder qw( );
use Object::Destroyer qw( );
open(my $fh_in, "<:encoding(cp1252)", $ARGV[0]) or die $!;
open(my $fh_out, ">:encoding(UTF-8)", $ARGV[1]) or die $!;
my $tree = Object::Destroyer->new(HTML::TreeBuilder->new(), 'delete');
$tree->parse_file($fh_in);
my $h1Element = $tree->look_down("_tag", "h1");
my $h1TrimmedText = $h1Element->as_trimmed_text();
say($fh_out $h1TrimmedText);
答案 1 :(得分:-3)
我非常喜欢模块utf8::all
(遗憾的是不是核心模块)。
只需use utf8::all
,当您只使用UTF-8文件时,就不用担心IO了。