कॅरेक्टर एन्कोडिंग म्हणजे काय
एन्कोडिंग म्हणजे एक करार: «संख्या 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, स्पेससह).
त्यात उच्चारचिन्हांची अक्षरे, मराठी अक्षरे किंवा युरोचे चिन्ह नाही: ते इंग्रजीसाठी बनवले होते. म्हणूनच नंतर इतर तक्ते लागले.
| कंट्रोल अक्षर | डेसिमल | हेक्साडेसिमल | बायनरी (7 बिट) | कशासाठी |
|---|---|---|---|---|
| शून्य (NUL) | 0 | 00 | 0000000 | अनेक भाषांमध्ये स्ट्रिंगचा शेवट दाखवते |
| आडवा टॅब (TAB) | 9 | 09 | 0001001 | पुढच्या टॅब स्टॉपवर जातो |
| नवी ओळ (LF) | 10 | 0A | 0001010 | पुढच्या ओळीवर उतरतो |
| कॅरेज रिटर्न (CR) | 13 | 0D | 0001101 | ओळीच्या सुरुवातीला परत जातो |
| एस्केप (ESC) | 27 | 1B | 0011011 | नियंत्रण क्रम सुरू करतो |
| स्पेस | 32 | 20 | 0100000 | पहिले छापता येणारे अक्षर |
| डिलीट (DEL) | 127 | 7F | 1111111 | अक्षर खोडतो |
लक्षात ठेवण्यासारखे संबंध
तक्ता यादृच्छिकपणे लावलेला नाही. काही नियमिततांमुळे तुम्ही कोड पाठ वाचू शकता.
- «0» ते «9» हे अंक 48 ते 57 वर येतात (हेक्साडेसिमलमध्ये 30 ते 39). अंकाची किंमत म्हणजे त्याचा कोड वजा 48: «7» म्हणजे 55, आणि 55 − 48 = 7.
- मोठी अक्षरे 65 («A») पासून 90 («Z») पर्यंत आणि लहान अक्षरे 97 («a») पासून 122 («z») पर्यंत जातात.
- मोठे अक्षर आणि त्याचे लहान अक्षर यातील फरक नेहमी 32 असतो: «A» = 65 आणि «a» = 97; «C» = 67 आणि «c» = 99. बायनरीमध्ये फक्त एक बिट बदलतो: «A» साठी 01000001 आणि «a» साठी 01100001.
- मोठे अक्षर वर्णमालेत कितवे आहे ते जाणण्यासाठी 64 वजा करा: «C» म्हणजे 67 आणि 67 − 64 = 3, तिसरे अक्षर.
- सर्व मोठ्या अक्षरांचे (65 ते 90) कोड लहान अक्षरांपेक्षा (97 ते 122) कमी असल्याने «कोडनुसार» वर्णक्रम «Zebra» ला «apple» च्या आधी ठेवतो. नीट क्रमवारीसाठी अनेक प्रोग्राम्सना वेगळा तुलना पर्याय लागतो.
ओळीचा शेवट: 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 मजकूरही असतो. बाकीचे जास्त बाइट घेतात.
| अक्षर | कोड पॉइंट | UTF-8 मधील बाइट | बाइट (हेक्साडेसिमल) |
|---|---|---|---|
| A | U+0041 | 1 | 41 |
| é | U+00E9 | 2 | C3 A9 |
| ñ | U+00F1 | 2 | C3 B1 |
| € | U+20AC | 3 | E2 82 AC |
| 😀 | U+1F600 | 4 | F0 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 अक्षरे त्यांच्या डेसिमल, हेक्साडेसिमल, ऑक्टल आणि बायनरी कोडसह आणि कंट्रोल अक्षरांच्या नावांसह दाखवते.
- ओळ शोधण्यासाठी शोधात एक अक्षर, कोड किंवा कंट्रोल अक्षराचे नाव लिहा (उदाहरणार्थ A, 65, 41 किंवा LF).
- फक्त एकच गट पाहण्यासाठी फिल्टर बटणे (कंट्रोल, अंक, मोठी अक्षरे, लहान अक्षरे, चिन्हे) वापरा.
- रूपांतरासाठी «मजकूर» मध्ये मजकूर लिहा आणि स्वरूप (दशमान, हेक्साडेसिमल, अष्टमान किंवा बायनरी) निवडा: खाली कोड दिसतात. «Hola» डेसिमलमध्ये 72 111 108 97 आणि हेक्साडेसिमलमध्ये 48 6F 6C 61 देते.
- उलटही करता येते: «कोड» मध्ये स्पेस किंवा स्वल्पविरामाने वेगळे केलेले कोड पेस्ट करा आणि मजकूर तयार होतो. हेक्साडेसिमलमध्ये 0x41 सारखे उपसर्ग चालतात.
मजकुरात ñ किंवा मराठी अक्षरांसारखी ASCII नसलेली अक्षरे असतील तर टूल तसे सांगते आणि त्यांचा Unicode कोड दाखवते. UTF-8 मधील खरे बाइट पाहण्यासाठी «मजकूर ते बायनरी» वापरा: ñ साठी 11000011 10110001, 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 एन्कोडिंग निवडून उघडा आणि ते ठीक होते.