मैं Xxces के सैक्स पार्सर का उपयोग करके XML फ़ाइल पार्स कर रहा हूं।
क्या XML घोषणा की <?xml version="1.0" encoding="UTF-8"?>
आवश्यकता है?
मैं Xxces के सैक्स पार्सर का उपयोग करके XML फ़ाइल पार्स कर रहा हूं।
क्या XML घोषणा की <?xml version="1.0" encoding="UTF-8"?>
आवश्यकता है?
जवाबों:
XML 1.0 में, एक्सएमएल घोषणा है वैकल्पिक । XML 1.0 अनुशंसा का अनुभाग 2.8 देखें , जहां यह कहता है कि इसका "उपयोग" किया जाना चाहिए - जिसका अर्थ है कि यह अनुशंसित है, लेकिन अनिवार्य नहीं है। एक्सएमएल 1.1 में, हालांकि, घोषणा अनिवार्य है । XML 1.1 अनुशंसा के अनुभाग 2.8 को देखें , जहां यह कहता है कि "MUST" का उपयोग किया जाना चाहिए। यहां तक कि यह भी बताया गया है कि यदि घोषणा अनुपस्थित है, तो इसका मतलब है कि दस्तावेज़ स्वतः एक्सएमएल 1.0 दस्तावेज़ है।
ध्यान दें कि XML घोषणा में encoding
और standalone
दोनों वैकल्पिक हैं। केवल version
अनिवार्य है। इसके अलावा, ये विशेषताएँ नहीं हैं, इसलिए यदि वे मौजूद हैं तो उन्हें उसी क्रम में होना चाहिए: version
और उसके encoding
बाद कोई भी standalone
।
<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" standalone="yes"?>
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
यदि आप इस तरह से एन्कोडिंग निर्दिष्ट नहीं करते हैं, तो XML पार्सर यह अनुमान लगाने की कोशिश करते हैं कि एन्कोडिंग का क्या उपयोग किया जा रहा है। एक्सएमएल 1.0 सिफारिश में वर्णन किया गया है कि एक संभव तरीका चरित्र एन्कोडिंग को स्वचालित किया जा सकता है । व्यवहार में, यह एक समस्या नहीं है यदि इनपुट को UTF-8, UTF-16 या US-ASCII के रूप में एन्कोड किया गया है। ऑटोडेटेक्शन तब काम नहीं करता है जब यह 8-बिट एनकोडिंग का सामना करता है जो यूएस-एएससीआईआई श्रेणी (जैसे आईएसओ 8859-1) के बाहर के पात्रों का उपयोग करते हैं - यदि आप कर सकते हैं तो इन बनाने से बचें।
standalone
यह दर्शाता है कि XML दस्तावेज़ सही ढंग से DTD के बिना या नहीं संसाधित किया जा सकता। लोग शायद ही इसका उपयोग करते हैं। इन दिनों, एक्सएमएल प्रारूप को डिजाइन करना एक बुरा है जो कि अपने डीटीडी के बिना जानकारी गायब है।
अपडेट करें:
"प्रोलॉग एरर / अमान्य यूटीएफ -8 एन्कोडिंग" त्रुटि इंगित करती है कि फ़ाइल के अंदर पाया गया वास्तविक डेटा पार्सर उस एनकोडिंग से मेल नहीं खाता जो एक्सएमएल घोषणा कहती है। या कुछ मामलों में फ़ाइल के अंदर डेटा ऑटोडेटेड एन्कोडिंग से मेल नहीं खाता।
चूँकि आपकी फ़ाइल में बाइट-ऑर्डर-मार्क (BOM) होता है, यह UTF-16 एन्कोडिंग में होना चाहिए। मुझे संदेह है कि आपकी घोषणा कहती है <?xml version="1.0" encoding="UTF-8"?>
जो स्पष्ट रूप से गलत है जब फ़ाइल को नोटपैड द्वारा UTF-16 में बदल दिया गया है। सरल उपाय यह है कि इसे हटा दें encoding
और बस कहें <?xml version="1.0"?>
। आप यह कहने के लिए इसे संपादित भी कर सकते हैं encoding="UTF-16"
लेकिन यह मूल फ़ाइल (जो UTF-16 में नहीं थी) के लिए गलत होगा या यदि फ़ाइल किसी तरह वापस UTF-8 या किसी अन्य एन्कोडिंग में बदल जाती है।
BOM को निकालने का प्रयास न करें - यह समस्या का कारण नहीं है। XML को संपादित करने के लिए नोटपैड या वर्डपैड का उपयोग करना वास्तविक समस्या है!
Xml घोषणा वैकल्पिक है, इसलिए आपका xml इसके बिना सुव्यवस्थित है। लेकिन इसका उपयोग करने की सिफारिश की जाती है ताकि पार्सर्स द्वारा गलत धारणाएं न बनाई जाएं, विशेष रूप से उपयोग किए गए एन्कोडिंग के बारे में।