2011-11-27 59 views
6

當我試圖下載與下面的一些代碼的HTML文件:WWW ::機械化和寬字符警告

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

我得到警告:

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

有人能解釋我如何可以修復這個警告?

回答

8

你需要確保輸出文件句柄與正確的編碼打開。

從在文檔短暫一瞥,它看起來並不像機甲有保存的文件配置的編碼,所以你可以抓住的內容和自己保存:

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

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

open:utf8位將確保發送到文件句柄的數據被正確編碼爲UTF-8。

另一種方式來做到這一點是手動編碼:

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

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

這並沒有解決我的問題。我仍然收到廣泛的字符警告。 – CJ7

6

此前1.73版本,你必須保存的內容使用solution posted by @friedo手動。

此後,save_content()讓你設置由機械化打開文件句柄時使用的I/O層。通過將binmode設置爲:utf8,如下所示,寬字符被寫入而不發出警告:

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