2

www ページをダウンロードするスクリプトがあり、テキストを抽出して、統一されたエンコーディング (UTF8 で問題ありません) で保存したいと考えています。ダウンロード (UserAgent)、解析 (TreeBuilder)、およびテキスト抽出は問題ないように見えますが、正しく保存されているかどうかはわかりません。

たとえば、notepad ++ で出力ファイルを開くと、それらは表示されません。元の HTML ビューは、テキスト エディターで検索します。

HTML ファイルには通常、charset=windows-1256 または charset=UTF-8 があります。

したがって、UTF8 を機能させることができるかどうかは、単なる再コーディングの問題であると考えました。HTMLファイルがディスクに保存されていると仮定して、私が試したことのいくつかを次に示します。

my $tree = HTML::TreeBuilder->new;
$tree->parse_file("$inhtml");
$tree->dump;

テキスト エディターでエンコーディングを utf8 に切り替えた後にのみ、.txt ファイルに STDOUT ビュー用に正しくキャプチャされたダンプからの出力…</p>

$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 であり、それ以外の場合は Not UTF8 であることを示します。

疲れた

opening an file with ">" and ">:utf8"
binmode(MYFILE, ":utf8");
encode("utf8", $string); (where string is the output of formatter->format(tree))

しかし、何も正しく動作していないようです。

そこにいる専門家は、私が欠けているものを知っていますか?

前もって感謝します!

4

2 に答える 2

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);
于 2012-04-16T13:29:06.457 に答える
-3

私はモジュールが本当に好きですutf8::all(残念ながらコアにはありません)。

UTF use utf8::all-8 ファイルのみを使用する場合は、IO について心配する必要はありません。

于 2012-04-16T12:37:38.487 に答える