2012-04-13 9 views
7

मुझे opencsv का उपयोग करके एक बहुत ही परेशान एन्कोडिंग समस्या है। जब मैं एक सीएसवी फ़ाइल निर्यात करता हूं, तो मैंने चरित्र प्रकार को 'यूटीएफ -8' के रूप में सेट किया है।utf-8 का उपयोग कर opencsv CSVWriter कई भाषाओं के लिए काम नहीं कर रहा है

CSVWriter writer = new CSVWriter(new OutputStreamWriter("D:/test.csv", "UTF-8")); 

लेकिन जब मैं माइक्रोसॉफ्ट ऑफिस एक्सेल 2007 के साथ csv फ़ाइल खोलते हैं, तो यह पता चला है यह 'UTF-8 बीओएम' एन्कोडिंग है?

एक बार जब मैं नोटपैड में फ़ाइल को सहेजता हूं और फिर से खोलता हूं, तो फ़ाइल वापस यूटीएफ -8 पर जाती है और इसमें सभी अक्षरों ठीक दिखाई देते हैं। मुझे लगता है कि मैंने पर्याप्त खोज की है, लेकिन मुझे अपनी फ़ाइल को 'यूटीएफ -8 बीओएम' में बदलने से रोकने के लिए कोई समाधान नहीं मिला है। कोई विचार, कृपया?

+1

जावा को अपने आप में कोई बीओएम नहीं जोड़ना चाहिए, क्योंकि वहां कोई भी आउटपुटस्ट्रीमवाइटर कन्स्ट्रक्टर नहीं है जो मुझे लगता है कि आपके कोड से कुछ गुम है। क्या बीओएम आपके द्वारा लिखे गए डेटा का हिस्सा हो सकता है? –

उत्तर

13

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

FileOutputStream os = new FileOutputStream(file); 
os.write(0xef); 
os.write(0xbb); 
os.write(0xbf); 
CSVWriter csvWrite = new CSVWriter(new OutputStreamWriter(os)); 

अब आपकी फ़ाइल एक्सेल -8 सीएसवी के रूप में एक्सेल द्वारा समझा जाएगा।

+0

एमएस एक्सेल से निपटने में क्या समस्या है? –

+0

यह वर्षों से मेरे लिए एक वास्तविक उपद्रव रहा है! आपका समाधान सही काम करता है। धन्यवाद – Ashley

2

UTF-8 और UTF-8 Signature (जिसे गलत तरीके से नामित किया गया है UTF-8 BOM) समान एन्कोडिंग हैं, और हस्ताक्षर is used only to distinguish it from any other encodings हैं। किसी भी यूनिकोड एप्लिकेशन को यूटीएफ -8 हस्ताक्षर (जो तीन बाइट अनुक्रम EF BB BF) सही ढंग से संसाधित करना चाहिए।

क्यों जावा विशेष रूप से इस हस्ताक्षर को जोड़ता है और इसे कैसे रोकना है जिसे मैं नहीं जानता।

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