एक एन्कोडिंग चरित्र सेट से बाइट्स और पात्रों के बीच एक मानचित्रण है, इसलिए यह बाइट्स और वर्णों के बीच के अंतर पर चर्चा करने और समझने में मददगार होगा ।
बाइट्स को 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 ।
जब कंप्यूटर वर्णों के बारे में डेटा को आंतरिक रूप से संग्रहीत करते हैं या इसे किसी अन्य सिस्टम में संचारित करते हैं, तो वे बाइट्स को संग्रहीत या भेजते हैं। एक फ़ाइल खोलने या संदेश प्राप्त करने वाले सिस्टम को बाइट्स देखने की कल्पना करें 195, 162
। यह कैसे पता चलता है कि ये कौन से वर्ण हैं?
सिस्टम के लिए उन बाइट्स को वास्तविक पात्रों के रूप में व्याख्या करने के लिए (और इसलिए उन्हें प्रदर्शित करें या उन्हें किसी अन्य एन्कोडिंग में परिवर्तित करें), इसके लिए उपयोग किए गए एन्कोडिंग को जानना आवश्यक है। यही कारण है कि XML हेडर में एन्कोडिंग प्रकट होता है या एक पाठ संपादक में निर्दिष्ट किया जा सकता है। यह सिस्टम को बाइट्स और कैरेक्टर के बीच मैपिंग बताता है।