2015-05-06 1 views
5

मैं जावा Scanner का उपयोग कर रहा हूं।यह चरित्र क्यों है जिससे मेरा स्कैनर असफल हो जाता है?

मेरे पास .txt फ़ाइल है जिसमें इस पाठ को सहेजा गया है।

PriceDB = { 
    ["profileKeys"] = { 
     ["Name - 回音山"] = "Name - 回音山", 
    }, 
    ["char"] = { 
     ["Name - 回音山"] = { 
      ["CurrentValue"] = "一口价:|cffffffff70,197|TInterface\\MoneyFrame\\UI-GoldIcon:0:0:2:0|t|r", 
     }, 
    }, 
} 

सभी मुझे क्या करना कोशिश कर रहा हूँ एक स्कैनर के साथ इस फ़ाइल खुला है और फ़ाइल से 70,197 की "CurrentValue" निकालने और एक पूर्णांक रूप में सहेजें। हालांकि, हर बार फ़ाइल खोले जाने पर यह एक पंक्ति नहीं पढ़ेगी और संदेश के रूप में "No line found" के साथ NoSuchElementException फेंकता है। फ़ाइल के साथ झुकाव के बाद और कुछ चीनी पात्रों को एक-एक करके हटाकर मैंने इसे इस छोटे से लड़के को संकुचित कर दिया। किसी कारण से, स्कैनर उस चरित्र को पसंद नहीं करता है। मैं बस सोच रहा था कि क्या कुछ एन्कोडिंग सेटिंग है जिसे मुझे बदलने की ज़रूरत है या यदि मैं BufferedReader का उपयोग करने जा रहा हूं या क्या ... मैं ईमानदारी से सच में नहीं जानता कि क्या हो रहा है सिवाय इसके कि मुझे लगता है कि एक एन्कोडिंग त्रुटि है। तो यहाँ क्या हो रहा है?

संपादित करें: यहां मेरे स्कैनर का प्रारंभिकरण है।

Scanner scanner; 
if (region.equals("US")) { 
       scanner = new Scanner(new File("C:\\Program Files\\World of Warcraft\\WTF\\Account\\313023286#1\\SavedVariables\\WoWTokenPrice.lua")); 
      } else if (region.equals("EU")) { 
       scanner = new Scanner(new File("C:\\Program Files\\World of Warcraft\\WTF\\Account\\313495228#1\\SavedVariables\\WoWTokenPrice.lua")); 
      } else if (region.equals("China")) { 
       File file = new File("C:\\Program Files\\World of Warcraft\\WTF\\Account\\232241227#1\\SavedVariables\\WoWTokenPrice.lua"); 
       System.out.println(file.exists()); 
       scanner = new Scanner(file); 
      } else { 
       System.exit(1); 
       break; 
      } 

मैंने अभी इसे कॉपी किया है। क्षेत्र == "चीन"

+1

अपने स्कैनर का एक उदाहरण जाओ? मुझे दिलचस्पी है कि चरित्र एन्कोडिंग उचित रूप से सेट है या नहीं। –

+0

क्या आप उचित एन्कोडिंग सेट कर रहे हैं? वह एन्कोडिंग क्या है? और "परेशानी चरित्र" के लिए यूनिकोड कोड बिंदु क्या है? – Thilo

उत्तर

4

आपको अपना Scanner बनाते समय सही एन्कोडिंग निर्दिष्ट करना होगा। निर्माता:

public Scanner(InputStream source, String charsetName) 

एक नया स्कैनर कि निर्दिष्ट इनपुट धारा से स्कैन मूल्यों का उत्पादन निर्माण करती है। स्ट्रीम से बाइट निर्दिष्ट वर्णसेट का उपयोग कर वर्णों में परिवर्तित हो जाते हैं।

Find here your charset, मैं विदेशी अक्षरों में UTF-16 नहीं बल्कि एक विशेषज्ञ अनुमान :)।

Scanner scanner = new Scanner(is, StandardCharsets.UTF-16.toString()); 
+0

मुझे यह भी ध्यान रखना चाहिए कि इस फ़ाइल में अंग्रेजी, कोरिया और ताइवान के पात्र भी होंगे (वहां भाषाएं नहीं जानते हैं)। यूटीएफ -16 इन सभी को क्या समर्थन करेगा? – david2278

+0

[यहां देखें] (http://a4esl.org/c/charset.html) –

+1

यूटीएफ -16 यूनिकोड कोडपॉइंट्स एन्कोड करें, इसलिए यह यूनिकोड मानक में किसी भी भाषा के पात्रों को स्पष्ट रूप से स्टोर कर सकता है, जो आजकल अधिकांश भाषाओं को कवर करता है। [निरपेक्ष न्यूनतम सॉफ्टवेयर डेवलपर बिल्कुल, यूनिकोड और कैरेक्टर सेट्स के बारे में सकारात्मक रूप से जानना चाहिए (कोई बहाना नहीं!)] (Http://www.joelonsoftware.com/articles/Unicode.html) –

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