以下のコードでHTMLファイルをダウンロードしようとすると:
$mech->get($link)
$mech->save_content("file.html");
警告が表示されます:
Wide character in print at C:/strawberry/perl/site/lib/WWW/Mechanize.pm line 2040.
誰かがこの警告を修復する方法を説明できますか?
以下のコードでHTMLファイルをダウンロードしようとすると:
$mech->get($link)
$mech->save_content("file.html");
警告が表示されます:
Wide character in print at C:/strawberry/perl/site/lib/WWW/Mechanize.pm line 2040.
誰かがこの警告を修復する方法を説明できますか?
出力ファイルハンドルが適切なエンコーディングで開かれていることを確認する必要があります。
ドキュメントをざっと見てみると、Mech には保存されたファイルの構成可能なエンコーディングがないように見えるため、コンテンツを取得して自分で保存できます。
$mech->get( $link );
my $content = $mech->content;
open my $fh, '>:utf8', $file or die "$file: $!";
print $fh $content;
の:utf8
ビットはopen
、ファイルハンドルに送信されたデータが UTF-8 として適切にエンコードされていることを確認します。
それを行う別の方法は、手動でエンコードすることです。
use Encode;
my $content = encode 'utf8', $mech->content;
open my $fh, '>', $file or die "$file: $!";
binmode $fh;
print $fh $content;
バージョン1.73より前では、@friedo によって投稿されたソリューションを使用してコンテンツを手動で保存する必要がありました。
それ以降save_content()
、ファイルハンドルを開くときに Mechanize が使用する I/O レイヤーを設定できるようになりました。次のようにbinmode を設定する:utf8
と、ワイド文字が警告なしで書き込まれます。
$mech->save_content("file.html", binmode => ':utf8');