"एन्कोडिंग" विशेषता को समझने के लिए, आपको बाइट्स और वर्णों के बीच के अंतर को समझना होगा ।
बाइट्स को 0 और 255 के बीच की संख्याओं के रूप में सोचें, जबकि वर्ण "a", "1" और "Ä" जैसी चीजें हैं। उपलब्ध सभी वर्णों के समुच्चय को एक वर्ण समुच्चय कहा जाता है ।
प्रत्येक चरित्र में एक या एक से अधिक बाइट्स का एक क्रम होता है जो इसका प्रतिनिधित्व करने के लिए उपयोग किया जाता है; हालाँकि, बाइट्स की सही संख्या और मूल्य उपयोग किए गए एन्कोडिंग पर निर्भर करता है और कई अलग-अलग एनकोडिंग हैं।
अधिकांश एनकोडिंग एक पुराने वर्ण सेट और एन्कोडिंग पर आधारित होते हैं, जिन्हें ASCII कहा जाता है, जो कि एक एकल बाइट प्रति वर्ण (वास्तव में, केवल 7 बिट्स) है और इसमें 128 वर्ण होते हैं, जिनमें यूएस अंग्रेजी में उपयोग किए जाने वाले बहुत से सामान्य वर्ण शामिल हैं।
उदाहरण के लिए, यहाँ ASCII वर्ण सेट में 6 अक्षर हैं जो कि 60 से 65 के मानों द्वारा दर्शाए गए हैं।
Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║ Character ║
╠══════╬══════════════║
║ 60 ║ < ║
║ 61 ║ = ║
║ 62 ║ > ║
║ 63 ║ ? ║
║ 64 ║ @ ║
║ 65 ║ A ║
╚══════╩══════════════╝
पूर्ण ASCII सेट में, सबसे कम उपयोग किया गया मूल्य शून्य है और उच्चतम 127 है (ये दोनों छिपे हुए नियंत्रण वर्ण हैं)।
हालाँकि, एक बार जब आपको बुनियादी ASCII प्रदान करने वाले उदाहरणों (उदाहरण के लिए, लहजे, मुद्रा प्रतीकों, ग्राफिक प्रतीकों आदि के साथ अक्षर) की तुलना में अधिक वर्णों की आवश्यकता शुरू होती है, तो ASCII उपयुक्त नहीं है और आपको कुछ अधिक व्यापक की आवश्यकता है। आपको अधिक वर्ण (एक अलग वर्ण सेट) की आवश्यकता है और आपको एक अलग एन्कोडिंग की आवश्यकता है क्योंकि सभी वर्णों में फिट होने के लिए 128 वर्ण पर्याप्त नहीं हैं। कुछ एन्कोडिंग एक बाइट (256 वर्ण) या छह बाइट तक प्रदान करते हैं।
समय के साथ बहुत सारे एनकोडिंग बनाए गए हैं। विंडोज की दुनिया में, CP1252 या ISO-8859-1 है, जबकि लिनक्स उपयोगकर्ता UTF-8 का पक्ष लेते हैं। जावा UTF-16 का उपयोग मूल रूप से करता है।
एक एन्कोडिंग में एक चरित्र के लिए बाइट मानों का एक क्रम किसी अन्य एन्कोडिंग में पूरी तरह से अलग चरित्र के लिए खड़ा हो सकता है, या यहां तक कि अमान्य भी हो सकता है।
उदाहरण के लिए, में आईएसओ 8859-1 , एक मूल्य की एक बाइट का प्रतिनिधित्व करती है 226
, जबकि में UTF-8 यह दो बाइट्स है: 195, 162
। हालाँकि, ISO 8859-1 में , 195, 162
दो अक्षर होंगे, Ã, 85 ।
XML को वर्णों का अनुक्रम नहीं बल्कि बाइट्स का एक क्रम समझें।
एक्सएमएल बाइट्स को देखने वाले सिस्टम की कल्पना करें 195, 162
। यह कैसे पता चलता है कि ये कौन से वर्ण हैं?
सिस्टम के लिए उन बाइट्स को वास्तविक पात्रों के रूप में व्याख्या करने के लिए (और इसलिए उन्हें प्रदर्शित करें या उन्हें किसी अन्य एन्कोडिंग में परिवर्तित करें), इसे XML में उपयोग किए जाने वाले एन्कोडिंग को जानना होगा।
चूंकि अधिकांश आम एनकोडिंग एएससीआईआई के साथ संगत हैं, जहां तक बुनियादी वर्णमाला वर्ण और प्रतीक चलते हैं, इन मामलों में, घोषणा केवल एएससीआईआई पात्रों का उपयोग करने के साथ दूर हो सकती है कहने के लिए कि एन्कोडिंग क्या है। अन्य मामलों में, पार्सर को घोषणा की एन्कोडिंग का पता लगाने की कोशिश करनी चाहिए। चूंकि यह जानता है कि घोषणा शुरू होती है <?xml
इसलिए ऐसा करना बहुत आसान है।
अंत में, version
विशेषता एक्सएमएल संस्करण को निर्दिष्ट करती है, जिनमें से दो इस समय हैं ( विकिपीडिया एक्सएमएल संस्करण देखें । संस्करणों के बीच मामूली अंतर हैं, इसलिए एक एक्सएमएल पार्सर को यह जानने की जरूरत है कि यह क्या व्यवहार कर रहा है। ज्यादातर मामलों में (अंग्रेजी के लिए) वैसे भी वक्ताओं), संस्करण 1.0 पर्याप्त है।