2013-07-01 4 views
10

अगर मैं इस कोड लिखने, मैं इस आउटपुट के रूप में मिलता है -> यह पहला: मैं» ¿ और उसके बाद अन्य लाइनोंपाठ फ़ाइल से पढ़ने के प्रथम चरित्र: मैं »¿

try { 
    BufferedReader br = new BufferedReader(new FileReader(
      "myFile.txt")); 

    String line; 
    while (line = br.readLine() != null) { 
     System.out.println(line); 
    } 
    br.close(); 

} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

कैसे क्या मैं इससे बच सकता हूँ?

+0

मुझे लगता है कि यह एन्कोडिंग की वजह से है। –

+3

शायद बीओएम? https://en.wikipedia.org/wiki/Byte_order_mark –

+1

यह [यूटीएफ -8 बीओएम] है (https://en.wikipedia.org/wiki/Byte_order_mark)। –

उत्तर

1

समस्या एन्कोडिंग में हो सकती है। इस प्रयास करें:

BufferedReader in = new BufferedReader(new InputStreamReader(
     new FileInputStream("yourfile"), "UTF-8")); 
+0

मैं यह कहूंगा * निश्चित रूप से * एन्कोडिंग है;) – Joey

+2

मैंने पहले ही कोशिश की है। Ï »¿के स्थान पर '?' – Milton90

+0

यह आपके द्वारा उपयोग किए जा रहे आईडीई के कारण हो सकता है। कभी-कभी वे देशी ऑपरेटिंग सिस्टम के डिफ़ॉल्ट एन्कोडिंग सेट करते हैं – Tala

13

आप पात्रों मैं »¿हो रही है पहली पंक्ति पर क्योंकि इस क्रम UTF-8 byte order mark (BOM) है। यदि कोई टेक्स्ट फ़ाइल बीओएम से शुरू होती है, तो संभवतः यह विंडोज प्रोग्राम जैसे नोटपैड द्वारा उत्पन्न किया गया था।

अपनी समस्या को हल करने के लिए, हम बजाय UTF-8 के रूप में स्पष्ट रूप से फ़ाइल को पढ़ने के लिए चुनते हैं, जो कुछ भी डिफ़ॉल्ट सिस्टम वर्ण एन्कोडिंग (US-ASCII, आदि):

BufferedReader in = new BufferedReader(
    new InputStreamReader(
     new FileInputStream("myFile.txt"), 
     "UTF-8")); 
तो UTF-8 में

, बाइट अनुक्रम ï »¿एक चरित्र के लिए डीकोड, जो यू + एफईएफएफ है। यह वर्ण वैकल्पिक है - एक कानूनी यूटीएफ -8 फ़ाइल इसके साथ शुरू हो सकती है या नहीं भी हो सकती है। इसलिए हम पहले चरित्र केवल अगर यह U + FEFF है छोड़ देगा:

in.mark(1); 
if (in.read() != 0xFEFF) 
    in.reset(); 

और अब आप अपने कोड के बाकी के साथ जारी रख सकते हैं।

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