WWW ::机械化和广角警告

smi*_*ith 10 perl www-mechanize

当我尝试使用以下代码下载一些HTML文件时:

$mech->get($link)
$mech->save_content("file.html");
Run Code Online (Sandbox Code Playgroud)

我收到警告:

Wide character in print at C:/strawberry/perl/site/lib/WWW/Mechanize.pm line 2040.
Run Code Online (Sandbox Code Playgroud)

有人可以解释我如何修复此警告吗?

fri*_*edo 9

您需要确保使用正确的编码打开输出文件句柄.

简单地看一下文档,看起来Mech对保存的文件没有可配置的编码,因此您可以抓取内容并自行保存:

$mech->get( $link );
my $content = $mech->content;

open my $fh, '>:utf8', $file or die "$file: $!";
print $fh $content;
Run Code Online (Sandbox Code Playgroud)

:utf8位中的位open将确保发送到文件句柄的数据被正确编码为UTF-8.

另一种方法是手动编码:

use Encode;
my $content = encode 'utf8', $mech->content;

open my $fh, '>', $file or die "$file: $!";
binmode $fh;
print $fh $content;
Run Code Online (Sandbox Code Playgroud)


Zan*_*ano 8

在版本1.73之前,您必须使用@friedo发布解决方案手动保存内容.

从那时起,save_content()您可以在打开文件句柄时设置Mechanize使用的I/O层.通过将binmode设置:utf8为如下所示,可以在没有警告的情况下写入宽字符:

$mech->save_content("file.html", binmode => ':utf8');
Run Code Online (Sandbox Code Playgroud)