2010-02-26 13 views
9

मैं यूटीएफ -8 में पर्ल में एचटीएमएल फाइलों को बनाने/सहेजने की कोशिश कर रहा हूं, लेकिन मैंने अभी तक कुछ भी नहीं किया है। previous answer here on SO ने बिनमोड का उपयोग करने के लिए कहा, इसलिए मैंने कोशिश की। यहाँ मेरी कोड है:मैं पर्ल से यूटीएफ -8 के रूप में फ़ाइल कैसे सहेजूं?

open (OUT, ">$sectionfilename"); 
binmode(OUT, ":utf8"); 
print OUT $section; 
close OUT; 

जब मैं वे एएनएसआई एन्कोडिंग में अभी भी नोटपैड की तरह एक पाठ संपादक में इन फ़ाइलों को खोलने। मैं क्या गलत कर रहा हूं?

+0

आप एक बीओएम (बाइट ऑर्डर मार्क) चाहते हैं? –

+0

क्या आपका मतलब विशेष रूप से नोटपैड है? क्योंकि नोटपैड बीओएम के बिना यूटीएफ -8 को पहचान नहीं पाएगा। –

+0

नहीं, विशेष रूप से नोटपैड, टेक्स्टपैड भी नहीं। फ़ाइल सिर्फ यूटीएफ -8 के रूप में एन्कोडिंग नहीं है। – Joshua

उत्तर

2

मेरे लिए काम करने के लिए लगता है:

C:\Documents and Settings>cat a.pl 
$sectionfilename = "a.txt"; 
$section = "Hello \x{263A}!\n"; 

open (OUT, ">$sectionfilename"); 
binmode(OUT, ":utf8"); 
print OUT $section; 
close OUT;  

C:\Documents and Settings>perl a.pl 

C:\Documents and Settings>file a.txt 
a.txt: UTF-8 Unicode text, with CRLF line terminators 

लेकिन जब मैं पाठ बदलने के लिए लिखे जाने की:

$section = "Hello"; 

और चलाएँ:

C:\Documents and Settings>perl a.pl 

C:\Documents and Settings>file a.txt 
a.txt: ASCII text, with no line terminators 
12

एक पाठ संपादक एक है एन्कोडिंग जैसी निम्न-स्तरीय चीजों की जांच करने के लिए खराब उपकरण। इसके बजाए हेक्सव्यूवर/हेक्सडम्पर का प्रयोग करें। अपना उदाहरण लिखने का आधुनिक तरीका:

use autodie qw(:all); 
open my $out, '>:encoding(UTF-8)', $sectionfilename; 
print {$out} $section; 
close $out; 

autodie स्वचालित त्रुटि-जांच सक्षम करता है।

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