java - कैसे एसएक्स पार्सर को एक्सएमएल घोषणा से एन्कोडिंग निर्धारित करने दें?




xml encoding (2)

मुझे इसका जवाब मिला।

सैक पार्सर आंतरिक और इन्पुटसोर्स डॉक्स से इनपुट स्रोत का उपयोग करता है:

एसएक्स पार्सर XML इनपुट पढ़ने का तरीका निर्धारित करने के लिए इनपुट स्रोत ऑब्जेक्ट का उपयोग करेगा अगर कोई चरित्र स्ट्रीम उपलब्ध है, तो पार्स उस स्ट्रीम को सीधे पढ़ेगा, उस स्ट्रीम में पाया गया कोई टेक्स्ट एन्कोडिंग घोषणापत्र अनदेखा करेगा। अगर कोई चरित्र स्ट्रीम नहीं है, लेकिन एक बाइट स्ट्रीम है, तो पार्सर उस बाइट स्ट्रीम का उपयोग करेगा, जो इनकोडिंग का उपयोग इनपुटसोरस में निर्दिष्ट है या अन्य (यदि कोई एन्कोडिंग निर्दिष्ट नहीं किया गया है) एल्गोरिथ्म का उपयोग करके वर्ण एन्कोडिंग को स्वतः खोजना जैसे कि एक्सएमएल विनिर्देश अगर न तो कोई चरित्र स्ट्रीम और एक बाइट धारा उपलब्ध है, तो पार्सर सिस्टम पहचानकर्ता द्वारा पहचानी गई संसाधन के लिए एक यूआरआई कनेक्शन खोलने का प्रयास करेगा।

इसलिए मूल रूप से आपको सही एन्कोडिंग को चुनने के लिए पार्स करने के लिए एक वर्ण स्ट्रीम पास करना होगा। नीचे समाधान देखें:

SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
FeedHandler handler = new FeedHandler();
Reader isr = new InputStreamReader(getInputStream());
InputSource is = new InputSource();
is.setCharacterStream(isr);
parser.parse(is, handler);

मैं विभिन्न स्रोतों से XML फाइलों को पार्स करने की कोशिश कर रहा हूं (जिसके ऊपर मुझे बहुत कम नियंत्रण है) उनमें से ज्यादातर यूटीएफ -8 में एन्कोडेड हैं और निम्नलिखित स्निपेट का उपयोग करने में किसी भी समस्या का कारण नहीं है:

SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
FeedHandler handler = new FeedHandler();
InputSource is = new InputSource(getInputStream());
parser.parse(is, handler);

चूंकि सैक्स यूटीएफ -8 में चूक है, यह ठीक है। हालांकि कुछ दस्तावेज घोषित करते हैं:

<?xml version="1.0" encoding="ISO-8859-1"?>

हालांकि आईएसओ -8859-1 को घोषित किया गया है कि एसएएक्स अभी भी यूटीएफ -8 में चूक है। केवल अगर मैं जोड़ता हूं:

is.setEncoding("ISO-8859-1");

क्या SAX सही एन्कोडिंग का उपयोग करेगा

मैं कैसे विशेष रूप से इसे विशेष रूप से स्थापित किए बिना सक्स को XML एक्शन से सही एन्कोडिंग का पता लगा सकता हूं? मुझे इसकी ज़रूरत है क्योंकि मुझे पहले नहीं पता है कि फ़ाइल का एन्कोडिंग क्या होगा।

अग्रिम धन्यवाद, एलन


InputStream को इनपुट के स्रोत के रूप में तर्क दें जब आप सक्स को एन्कोडिंग को स्वत: पता लगाने के लिए चाहते हैं।

यदि आप एक विशिष्ट एन्कोडिंग सेट करना चाहते हैं, तो एक निर्दिष्ट एन्कोडिंग या सेट एन्कोडिंग विधि के साथ रीडर का उपयोग करें।

क्यूं कर? क्योंकि ऑटोडेटेक्शन एन्कोडिंग एल्गोरिदम को कच्चे डेटा की आवश्यकता होती है, वर्णों में कनवर्ट नहीं होता है।

इस विषय में सवाल यह है कि कैसे सैक्स पार्सर को एक्सएमएल घोषणा से एन्कोडिंग निर्धारित करने दें? मैंने एलेन के प्रश्न को गुमराह करने का उत्तर दिया और मैंने वैकल्पिक रूप से, जोर्न हॉर्स्टमान की टिप्पणी और मेरे बाद के अनुभव पर आधारित प्रदान किया।





xml-parsing