Search code examples
perlwww-mechanize

WWW::Mechanize and wide character warning


When I trying to download some HTML file with the code below:

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

I get the warning:

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

Could someone explain how I can repair this warning?


Solution

  • You'll need to ensure that the output filehandles are opened with the proper encoding.

    From a brief glance at the docs, it doesn't look like Mech has configurable encodings for saved files, so you can grab the content and save it yourself:

    $mech->get( $link );
    my $content = $mech->content;
    
    open my $fh, '>:utf8', $file or die "$file: $!";
    print $fh $content;
    

    The :utf8 bit in the open will make sure that data sent to the filehandle is encoded properly as UTF-8.

    Another way to do it is to encode manually:

    use Encode;
    my $content = encode 'utf8', $mech->content;
    
    open my $fh, '>', $file or die "$file: $!";
    binmode $fh;
    print $fh $content;