मैं के साथ एक फाइल खोल रहा हूँ

private String getStringFromFile(File file) {
    try {
        return Files.readString(Paths.get(file.getPath()), StandardCharsets.US_ASCII);
    }
    catch (Exception e) {
        System.out.println("Error while reading: " + file.getName());
        return "";
    }
}

और भले ही फ़ाइल स्पष्ट रूप से ASCII संगत प्रतीत हो, मुझे Error while reading: fileName मिल रहा है।

फ़ाइल इस तरह दिखती है:

enter image description here

कोड काम करता है अगर मैं इसे खोलने से पहले हेडर (स्क्वायर ब्रैकेट वाला हिस्सा) मैन्युअल रूप से हटा देता हूं (मैं बाद में कोड में उन्हें हटा रहा हूं)। क्या मेरे पास कोड को तोड़ते हुए वर्णों के दायरे को विस्तारित करने का कोई तरीका है जो केवल ASCII पर काम करता है या यह किसी प्रकार का दुर्लभ अपवाद है?

Pgn में फ़ाइल यहां है (इसे txt के रूप में खोला जा सकता है)।

0
tomashauser 9 मई 2020, 11:41

1 उत्तर

सबसे बढ़िया उत्तर

फ़ाइल लगभग ASCII में है। समस्या 'कोटे डी आइवर' में उद्धरण वर्ण के साथ है।

फ़ाइल में 0x92 बाइट है। विंडोज कोड पेज 1252 (वेस्ट यूरोपियन लैंग्वेजेज) में यह यूनिकोड कैरेक्टर U+2019 राइट सिंगल कोटेशन मार्क है।

समस्या यह है कि 1252 कोड पृष्ठ ISO-8859-1 से थोड़ा भिन्न है जो यूरो चिह्न और दाएं और बाएं उद्धरण चिह्नों जैसे कुछ सामान्य वर्णों के लिए मैप न किए गए स्थान का उपयोग करता है। और यह हमेशा मौजूद वर्णों की सूची में नहीं है।

कैसे ठीक करना है:

  • यदि आपका सिस्टम win1252 या cp1252 चारसेट का समर्थन करता है, तो इसका उपयोग करें।
  • अन्यथा, आपको गैर-असीसी वर्णों को प्रतिस्थापित करने के लिए एक FilterInputStream का उपयोग करना चाहिए, उदाहरण के लिए एक स्थान (ASCII 0x20) के साथ या एक कस्टम मानचित्र (0x92 -> 0x27 से राइट सिंगल कोटेशन मार्क () को बदलने के लिए। ) एक साधारण अपोस्ट्रोफ (')) के साथ। उसके बाद, InputStreamReader आपको अपेक्षित वर्ण देगा।
3
Serge Ballesta 9 मई 2020, 12:40