ASCII और Unicode: ये क्या हैं और किसलिए हैं

कंप्यूटर सिर्फ़ संख्याएँ समझता है, इसलिए स्क्रीन पर दिखने वाला हर अक्षर एक कोड है। ASCII पहली कोड तालिका थी जो मानक बनी और Unicode वह है जो आज हम किसी भी भाषा में लिखने के लिए इस्तेमाल करते हैं। यहाँ देखें कि ये कैसे काम करते हैं, कौन-से कोड जानना काम का है, मात्राओं की जगह अजीब चिह्न कभी-कभी क्यों दिखते हैं और यह सब तालिका में कैसे देखें।

अपडेट किया गया:

वर्ण एन्कोडिंग क्या है

एन्कोडिंग एक समझौता है: «संख्या 65 का मतलब अक्षर A है»। जब आप कोई टेक्स्ट लिखते हैं, तो प्रोग्राम वे संख्याएँ सेव करता है; जब कोई और उसे खोलता है, तो उसका प्रोग्राम उसी समझौते से उन्हें वापस अक्षरों में बदल देता है। अगर दोनों एक ही तालिका इस्तेमाल न करें, तो टेक्स्ट गलत दिखता है।

दो विचार अलग रखने होंगे। एक है वर्ण समुच्चय, यानी यह सूची कि कौन-सी संख्या किस चिह्न की है। दूसरा है कि वे संख्याएँ बाइट में कैसे सेव होती हैं। ASCII में दोनों सीधे-सीधे मिलते हैं; Unicode में नहीं, और वहीं UTF-8 आता है।

ASCII: 7 बिट के 128 वर्ण

ASCII (American Standard Code for Information Interchange का संक्षिप्त रूप) 1960 के दशक में मानक बना। यह 7 बिट इस्तेमाल करता है, यानी 2 की घात 7 = 128 कोड, 0 से 127 तक। इनमें से 33 कंट्रोल वर्ण हैं (0 से 31 और 127) और 95 छपने वाले हैं (32 से 126, स्पेस समेत)।

इसमें मात्रा वाले अक्षर, ñ या यूरो का चिह्न नहीं हैं: इसे अंग्रेज़ी के लिए बनाया गया था। इसी से समझ आता है कि बाद में दूसरी तालिकाओं की ज़रूरत क्यों पड़ी।

वे कोड जो आपको सबसे ज़्यादा मिलेंगे। स्पेस (32) दिखता न होने पर भी छपने वाले वर्णों में गिना जाता है।
कंट्रोल वर्णडेसिमलहेक्साडेसिमलबाइनरी (7 बिट)किसलिए होता है
शून्य (NUL)0000000000कई भाषाओं में स्ट्रिंग का अंत बताता है
क्षैतिज टैब (TAB)9090001001अगले टैब स्टॉप पर कूदता है
नई पंक्ति (LF)100A0001010अगली पंक्ति पर जाता है
कैरिज रिटर्न (CR)130D0001101पंक्ति की शुरुआत पर लौटता है
एस्केप (ESC)271B0011011कंट्रोल क्रम शुरू करता है
स्पेस32200100000छपने वाला पहला वर्ण
डिलीट (DEL)1277F1111111वर्ण मिटाता है

याद रखने लायक रिश्ते

तालिका संयोग से नहीं सजी है। कुछ नियमितताओं के साथ आप कोड याद से पढ़ सकते हैं।

पंक्ति का अंत: LF, CR और CRLF

नई पंक्ति सरल-सी चीज़ लगती है, पर सिस्टम के हिसाब से अलग तरह लिखी जाती है। Unix, Linux और macOS एक ही वर्ण LF (10) इस्तेमाल करते हैं। Windows लगातार दो इस्तेमाल करता है, CR और LF (13 और 10), जिन्हें CRLF कहते हैं। पुराने टेलीटाइपों को दो अलग आदेश चाहिए थे: कैरिज को शुरुआत पर लौटाना और कागज़ को एक पंक्ति आगे बढ़ाना।

यही फ़र्क उन फ़ाइलों की वजह है जो साधारण एडिटर में एक ही पंक्ति में दिखती हैं, या हर पंक्ति के अंत में कोई अजीब चिह्न दिखाती हैं। अगर आपको जानना है कि हर एक का कोड क्या है, तो ASCII टेबल की खोज में LF या CR लिखें।

«एक्सटेंडेड ASCII» कोई मानक नहीं है

क्योंकि एक बाइट 8 बिट का होता है और ASCII सिर्फ़ 7 इस्तेमाल करता है, 128 कोड खाली बचते थे (128 से 255 तक) और हर निर्माता और क्षेत्र ने उन्हें अपने ढंग से भरा। इसे «एक्सटेंडेड ASCII» कहा जाता है, लेकिन कोई एक तालिका नहीं है: कई हैं, जिन्हें कोड पेज कहते हैं। दो सबसे जानी-पहचानी हैं Latin-1 (ISO-8859-1), जिसमें é कोड 233 है, और Windows-1252, जो मिलती-जुलती है पर कोड 128 से 159 में अंतर हैं (वहीं, जैसे, यूरो है)।

समस्या यह है कि कोड 233 एक तालिका में «é» का मतलब रखता है और दूसरी में कुछ और। एक तालिका से लिखा और दूसरी से पढ़ा गया टेक्स्ट कचरा दिखाता था। Unicode इसी अव्यवस्था को खत्म करने के लिए बना।

Unicode और UTF-8

Unicode दुनिया की लगभग सभी लेखन प्रणालियों के हर वर्ण को, साथ में चिह्नों और इमोजी को, एक अनूठी संख्या देता है, जिसे कोड पॉइंट कहते हैं। आज इसमें 150,000 से ज़्यादा वर्ण हैं। इसे उपसर्ग U+ और हेक्साडेसिमल के साथ लिखा जाता है: «A» U+0041 है, «ñ» U+00F1 है, यूरो U+20AC है और मुस्कुराते चेहरे वाली इमोजी U+1F600 है। पहले 128 कोड पॉइंट ठीक ASCII वाले ही हैं।

UTF-8 इन संख्याओं को बाइट में सेव करने का सबसे ज़्यादा इस्तेमाल होने वाला तरीका है, और वर्ण के हिसाब से 1 से 4 बाइट लेता है। ASCII के 128 एक ही बाइट लेते हैं, जो हमेशा जैसा ही होता है, इसलिए ASCII टेक्स्ट एक मान्य UTF-8 टेक्स्ट भी है। बाकी ज़्यादा बाइट लेते हैं।

ASCII से जितना दूर, वर्ण उतने ज़्यादा बाइट लेता है।
वर्णकोड पॉइंटUTF-8 में बाइटबाइट (हेक्साडेसिमल)
AU+0041141
éU+00E92C3 A9
ñU+00F12C3 B1
€U+20AC3E2 82 AC
😀U+1F6004F0 9F 98 80

«ñ» की जगह «Ã±» क्यों दिखता है

यह सबसे आम गड़बड़ है और इसकी सटीक वजह है। UTF-8 में ñ दो बाइट है: C3 और B1। अगर कोई प्रोग्राम मानता है कि टेक्स्ट Latin-1 में है, तो वह हर बाइट को एक वर्ण की तरह पढ़ता है: C3 «Ã» है और B1 «±»। नतीजा: «Ã±»। यही «é» के साथ होता है, जो «Ã©» दिखता है, और «canción» के साथ, जो «canción» दिखता है।

समाधान लगभग हमेशा प्रोग्राम को बताना होता है कि फ़ाइल को UTF-8 के रूप में खोले (टेक्स्ट एडिटर में या स्प्रेडशीट के इम्पोर्ट सेटिंग में)। जब उलटा होता है, यानी Latin-1 का टेक्स्ट UTF-8 की तरह पढ़ा जाए, तो अक्सर प्रश्नचिह्न वाले हीरे दिखते हैं, क्योंकि वे अकेले बाइट मान्य UTF-8 क्रम नहीं बनाते।

ASCII टेबल और कन्वर्टर कैसे इस्तेमाल करें

«ASCII टेबल» टूल 128 वर्णों को उनके डेसिमल, हेक्साडेसिमल, ऑक्टल और बाइनरी कोड के साथ, और कंट्रोल वाले वर्णों के नाम के साथ दिखाता है।

  1. खोज में कोई वर्ण, कोड या किसी कंट्रोल वर्ण का नाम लिखें (जैसे A, 65, 41 या LF) ताकि उसकी पंक्ति मिल जाए।
  2. सिर्फ़ एक समूह देखने के लिए फ़िल्टर बटन (कंट्रोल, अंक, बड़े अक्षर, छोटे अक्षर, चिह्न) इस्तेमाल करें।
  3. बदलने के लिए «टेक्स्ट» में कोई टेक्स्ट लिखें और प्रारूप चुनें (दशमलव, हेक्साडेसिमल, ऑक्टल या बाइनरी): नीचे कोड दिखते हैं। «Hola» का डेसिमल में 72 111 108 97 और हेक्साडेसिमल में 48 6F 6C 61 बनता है।
  4. आप उलटा भी कर सकते हैं: «कोड» में स्पेस या कॉमा से अलग किए कोड पेस्ट करें और टेक्स्ट बन जाता है। हेक्साडेसिमल में 0x41 जैसे उपसर्ग स्वीकार होते हैं।

अगर टेक्स्ट में ñ जैसे वर्ण हैं जो ASCII के नहीं हैं, तो टूल बता देता है और उनका Unicode कोड दिखाता है। UTF-8 के असली बाइट देखने के लिए «टेक्स्ट से बाइनरी» इस्तेमाल करें: ñ का 11000011 10110001 आता है, यानी 8-8 बिट के दो बाइट। सीमाएँ: तालिका सिर्फ़ मानक ASCII दिखाती है, एक्सटेंडेड नहीं, और सब कुछ आपके ब्राउज़र में निकाला जाता है, टेक्स्ट किसी सर्वर को नहीं जाता।

अक्सर पूछे जाने वाले सवाल

ASCII में कितने वर्ण होते हैं?

128, कोड 0 से 127 तक, हर एक 7 बिट का। इनमें 33 कंट्रोल के हैं और 95 छपने वाले, स्पेस समेत।

अक्षर A और a का ASCII कोड क्या है?

«A» 65 है (हेक्साडेसिमल में 41, बाइनरी में 01000001) और «a» 97 है (हेक्साडेसिमल में 61, बाइनरी में 01100001)। इनमें हमेशा 32 का अंतर होता है।

ASCII और Unicode में क्या फ़र्क है?

ASCII में अंग्रेज़ी के लिए बने 128 वर्ण हैं। Unicode में 150,000 से ज़्यादा हैं, लगभग सभी भाषाओं और इमोजी के, और इसके पहले 128 वही हैं जो ASCII के हैं।

UTF-8 क्या है?

यह Unicode टेक्स्ट को बाइट में सेव करने का सबसे ज़्यादा इस्तेमाल होने वाला तरीका है। यह हर वर्ण के लिए 1 से 4 बाइट लेता है: ASCII वाले एक लेते हैं, ñ दो और इमोजी चार।

मेरा टेक्स्ट «Ã±» या «Ã©» क्यों दिखा रहा है?

क्योंकि UTF-8 में सेव किया टेक्स्ट Latin-1 की तरह पढ़ा जा रहा है। फ़ाइल को UTF-8 एन्कोडिंग बताकर खोलें और यह ठीक हो जाएगा।