2011-11-27 19 views
6

Quando si cerca di scaricare alcuni file HTML con il codice qui sotto:WWW :: Mechanize e in largo carattere avvertimento

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

ottengo l'avvertimento:

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

Qualcuno potrebbe spiegare come posso riparare questo avvertimento?

risposta

8

È necessario assicurarsi che i filehandle di output siano aperti con la codifica corretta.

Da una breve sguardo ai documenti, essa non sembra Mech ha codifiche configurabili per i file salvati, in modo da poter afferrare il contenuto e salvare voi stessi:

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

open my $fh, '>:utf8', $file or die "$file: $!"; 
print $fh $content; 

Il :utf8 bit nella open farà in modo che i dati inviati al filehandle siano codificati correttamente come UTF-8.

Un altro modo per farlo è quello di codificare manualmente:

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

open my $fh, '>', $file or die "$file: $!"; 
binmode $fh; 
print $fh $content; 
+0

Questo non ha risolto il problema per me. Ricevo ancora avvertimenti sui personaggi ampi. – CJ7

6

Prima della versione 1.73, si doveva salvare il contenuto manualmente utilizzando il solution posted by @friedo.

Da allora, save_content() consente di impostare il livello I/O utilizzato da Mechanize all'apertura del filehandle. Impostando binmode su :utf8 come segue, i caratteri ampi vengono scritti senza preavviso:

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