WWW :: Механизация и предупреждение широкого символа - PullRequest
10 голосов
/ 28 ноября 2011

Когда я пытаюсь загрузить HTML-файл с кодом ниже:

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

Я получаю предупреждение:

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

Может кто-нибудь объяснить, как я могу исправить это предупреждение?

Ответы [ 2 ]

10 голосов
/ 28 ноября 2011

Вам необходимо убедиться, что выходные дескрипторы файлов открыты в правильной кодировке.

Если коротко взглянуть на документы, не похоже, что у Меха есть настраиваемые кодировки для сохраненных файлов, поэтому вы можете получить содержимое и сохранить его самостоятельно:

$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;
7 голосов
/ 29 июня 2014

До версии 1.73 вам приходилось сохранять контент вручную, используя решение , опубликованное @ friedo .

. С тех пор save_content() позволяет вам установитьслой ввода / вывода, который используется Mechanize при открытии дескриптора файла.Если для binmode установлено значение :utf8 следующим образом, широкие символы записываются без предупреждения:

$mech->save_content("file.html", binmode => ':utf8');
...