10

以下のコードでHTMLファイルをダウンロードしようとすると:

$mech->get($link)
$mech->save_content("file.html");

警告が表示されます:

Wide character in print at C:/strawberry/perl/site/lib/WWW/Mechanize.pm line 2040.

誰かがこの警告を修復する方法を説明できますか?

4

2 に答える 2

10

出力ファイルハンドルが適切なエンコーディングで開かれていることを確認する必要があります。

ドキュメントをざっと見てみると、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;
于 2011-11-27T22:21:01.757 に答える
8

バージョン1.73より前では、@friedo によって投稿されたソリューションを使用してコンテンツを手動で保存する必要がありました。

それ以降save_content()、ファイルハンドルを開くときに Mechanize が使用する I/O レイヤーを設定できるようになりました。次のようにbinmode を設定する:utf8と、ワイド文字が警告なしで書き込まれます。

$mech->save_content("file.html", binmode => ':utf8');
于 2014-06-29T17:49:00.557 に答える