2011-09-14 14 views
8

मैं पर्ल का उपयोग कर एक सीएसवी फ़ाइल लिख रहा हूं। सीएसवी में जाने वाले डेटा में यूनिकोड वर्ण हैं। मैं सीएसवी को लिखने के लिए निम्नलिखित का उपयोग कर रहा:पर्ल फ़ाइल आउटपुट में बल यूटीएफ -8 बाइट ऑर्डर मार्क

#OPEN THE FILE FOR WRITE 
open(my $fh, ">:utf8", "rpt-".$datestring.".csv") 
or die "cannot open < rpt.csv: $!"; 

पात्रों फाइल के अंदर सही ढंग से लिख रहा है यही कारण है कि लेकिन प्रकट नहीं होता है UTF8 बाइट आदेश मार्क सहित किया जाना है। यह बदले में मेरे उपयोगकर्ताओं को एक्सेल में फ़ाइल खोलने की कोशिश कर रहा है। बाइट ऑर्डर मार्क को लिखने के लिए मजबूर करने का कोई तरीका है?

print $fh "\x{EFBBBF}; 

मैं फ़ाइल के शीर्ष पर निरर्थक शब्दों के साथ समाप्त हो गया:

मैं इसे नीचे दिए तरीक़े का प्रयास किया। किसी भी तरह की सहायता का स्वागत किया जाएगा।

+2

यूटीएफ -8 के लिए 'बाइट ऑर्डर मार्क' कोई तार्किक अर्थ नहीं बनाता है - यूटीएफ 8 के लिए केवल एक संभव बाइट ऑर्डर है। मुझे पता है कि विभिन्न विंडोज ऐप माइक्रोसॉफ्ट कोडपेज की बजाय यूनिकोड एन्कोडिंग के उपयोग को ट्रिगर करने के लिए 'बीओएम' की उपस्थिति पर भरोसा करते हैं, लेकिन यदि आप टूटी हुई एमएस ऐप्स से निपट नहीं रहे हैं तो बीओएम को जोड़ने में कोई मूल्य नहीं है यूटीएफ 8 दस्तावेज़। –

+0

@ अनुदान: या, पैडेंटिक होने के लिए: चूंकि बाइट्स की धारा के रूप में यूटीएफ -8 एन्कोड्स * कोई * बाइट ऑर्डर नहीं है। बाइट ऑर्डर (या एंडियननेस) केवल मल्टी बाइट संख्याओं के लिए समझ में आता है। – musiKk

+1

@ ग्रांट मैं सिद्धांत रूप से आपसे सहमत हूं। हालांकि मेरे उपयोगकर्ता टूटे हुए एमएस ऐप्स का उपयोग कर रहे हैं। इसलिए बीओएम को मजबूर करने की आवश्यकता है। –

उत्तर

13

यह करके देखें:

print $fh chr(65279); 
फ़ाइल खोलने के बाद

+0

यह किया था! धन्यवाद! –

+8

'प्रिंट $ एफएचएचआरआर (0xFEFF);' स्पष्ट होगा। –

+8

'फ़ाइल का उपयोग करें :: बीओएम(); मेरा $ एफएच खोलें, '>: utf8: के माध्यम से (फाइल :: बीओएम)', ... 'और भी स्पष्ट होगा। – daxim

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