2011-11-27 13 views
6

Cuando intenta descargar algún archivo HTML con el código de abajo:WWW :: Mecanizar y caracteres anchos advertencia

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

consigo la advertencia:

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

Podría alguien explicar cómo puedo reparar esta advertencia?

Respuesta

8

Deberá asegurarse de que los manejadores de archivos de salida se abren con la codificación adecuada.

Desde un breve vistazo a la documentación, que no se ve como Mech tiene codificaciones configurables para archivos guardados, para que pueda tomar el contenido y guardarlo a sí mismo:

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

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

El :utf8 poco en el open se asegurará de que los datos enviados a Filehandle estén codificados correctamente como UTF-8.

Otra manera de hacerlo es para codificar manualmente:

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

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

esto no ha resuelto el problema para mí. Todavía recibo advertencias de carácter amplio. – CJ7

6

Antes de la versión 1.73, había que guardar el contenido de forma manual mediante el solution posted by @friedo.

Desde entonces, save_content() le permite configurar la capa de E/S utilizada por Mechanize al abrir el identificador de archivo. Al establecer binmode a :utf8 de la siguiente, caracteres de ancho se escriben sin previo aviso:

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