2011-11-27 26 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 की तरह नहीं दिखता सहेजी गई फ़ाइलों के लिए विन्यास एन्कोडिंग है, तो आप सामग्री हड़पने और यह अपने आप को बचाने के लिए कर सकते हैं:

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

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

open में :utf8 बिट यह सुनिश्चित करेगा कि फ़ाइल हैंडल को भेजा गया डेटा यूटीएफ -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 परत सेट करने देता है जो फ़ाइलहेडल खोलते समय मैकेनाइज द्वारा उपयोग किया जाता है। बिनमोड को :utf8 पर निम्नानुसार सेट करके, विस्तृत वर्ण चेतावनी के बिना लिखे गए हैं:

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

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^