- UTF-8 एक variable-length encoding तरीका है, जो लाखों अक्षरों को दर्शाते हुए भी ASCII के साथ backward compatibility बनाए रखता है
- ASCII के समान 7-बिट क्षेत्र (
U+0000~U+007F) को वही 1 byte में इस्तेमाल किया जाता है, इसलिए ASCII फ़ाइल अपने आप एक वैध UTF-8 फ़ाइल भी होती है
- बाकी अक्षरों को 2~4 byte sequence में दर्शाया जाता है, और leading byte का bit pattern उसकी लंबाई बताता है, जबकि बाद के byte
10 से शुरू होकर continuation byte होने का संकेत देते हैं
- इसी डिज़ाइन की वजह से UTF-8, universal character set को संभालते हुए भी मौजूदा ASCII सिस्टम के साथ पूरी तरह compatible रहता है और सबसे व्यापक रूप से इस्तेमाल किया जाने वाला character encoding बन गया
- UTF-16, UTF-32 जैसे अन्य Unicode encoding ऐसे ASCII compatibility नहीं देते
UTF-8 डिज़ाइन की उत्कृष्टता
- जब पहली बार UTF-8 encoding को देखा, तो इस बात ने बहुत प्रभावित किया कि यह अलग-अलग भाषाओं और अक्षरों के लाखों प्रकार को एक ही सिस्टम में समेटते हुए भी मौजूदा ASCII के साथ compatible structure बनाए रखता है
- मूल रूप से UTF-8 अधिकतम 32 बिट तक का उपयोग करता है, लेकिन ASCII केवल 7 बिट का उपयोग करता है
- UTF-8 के डिज़ाइन सिद्धांत इस प्रकार हैं
- हर ASCII encoded फ़ाइल एक वैध UTF-8 फ़ाइल है
- केवल ASCII अक्षरों वाली हर UTF-8 फ़ाइल एक वैध ASCII फ़ाइल है
- केवल 128 अक्षरों तक सीमित पुराने सिस्टम और लाखों अक्षरों को समेटने वाली व्यवस्था को एक साथ जोड़ने का विचार बेहद नवोन्मेषी है
UTF-8 की मूल अवधारणा
- UTF-8 एक variable-width character encoding है, जिसे Unicode character set के सभी अक्षरों को दर्शाने के लिए डिज़ाइन किया गया है
- हर अक्षर को 1~4 byte में encode किया जाता है
- पहले 128 अक्षर (
U+0000~U+007F) single byte में store होते हैं, जिससे ASCII के साथ backward compatibility मिलती है
- बाकी अक्षर 2, 3 या 4 byte में encode होते हैं
- पहले byte के leading bit यह तय करते हैं कि encoding में कुल कितने byte होंगे
| 1-byte pattern |
byte की संख्या |
पूरा byte sequence pattern |
| 0xxxxxxx |
1 |
0xxxxxxx (सामान्य ASCII) |
| 110xxxxx |
2 |
110xxxxx 10xxxxxx |
| 1110xxxx |
3 |
1110xxxx 10xxxxxx 10xxxxxx |
| 11110xxx |
4 |
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
- multi-byte sequence के दूसरे, तीसरे और चौथे byte हमेशा
10 से शुरू होते हैं, जिससे यह स्पष्ट रूप से continuation byte के रूप में पहचाने जाते हैं
- मुख्य byte और continuation byte के बाकी bit को जोड़कर एक code point बनाया जाता है
- code point एक unique Unicode character identifier है, जिसे "U+" prefix और hexadecimal में लिखा जाता है
- उदाहरण: "A" का code point
U+0041 है
- UTF-8 encoding byte से अक्षर को decode करने की प्रक्रिया इस प्रकार है
- 1. byte पढ़ें; अगर शुरुआत 0 से हो, तो उसे single-byte character (ASCII) मानें, बाकी 7 bit से अक्षर दर्शाएँ और अगले byte पर जाएँ
- 2. अगर 0 से शुरू नहीं होता, तो
- 110 हो तो 2-byte character मानकर अगला 1 byte पढ़ें
- 1110 हो तो 3-byte character मानकर अगले 2 byte पढ़ें
- 11110 हो तो 4-byte character मानकर अतिरिक्त 3 byte पढ़ें
- 3. तय किए गए byte से leading bit हटाकर बचे bit को जोड़ें और code point की binary value बनाएँ
- 4. Unicode character set में उस code point को खोजकर स्क्रीन पर दिखाएँ
- 5. अगले byte के लिए यही प्रक्रिया दोहराएँ
उदाहरण: हिंदी अक्षर "अ"
- UTF-8 representation:
11100000 10100100 10000101 (3 byte)
- पहला byte (
11100000) → यह 3-byte character होने का संकेत देता है
- तीनों byte के valid bit मिलाकर →
00001001 00000101 = hexadecimal 0x0905
- code point
U+0905 देवनागरी अक्षर "अ" को दर्शाता है
फ़ाइल उदाहरण
-
1. Hey👋 Buddy
- कुल 13 byte से बना है
- ASCII अक्षर (H, e, y, B, u, d, d, y, स्पेस) → 1 byte each
- 👋 (U+1F44B) → 4 byte
11110000 10011111 10010001 10001011
- यह फ़ाइल एक वैध UTF-8 फ़ाइल है, लेकिन इसमें non-ASCII अक्षर (emoji) शामिल है, इसलिए यह ASCII के साथ backward compatible नहीं है
-
2. Hey Buddy
- कुल 9 byte, और सभी ASCII range में
- इसलिए यह फ़ाइल एक साथ वैध ASCII फ़ाइल और वैध UTF-8 फ़ाइल दोनों है
अन्य encoding की तुलना
- ASCII compatibility देने वाले कुछ अन्य encoding भी हैं, लेकिन UTF-8 जितने व्यापक रूप से इस्तेमाल नहीं होते
- GB18030 (चीनी मानक) आदि भी ASCII compatibility देते हैं, लेकिन व्यापक नहीं हैं
- ISO/IEC 8859 series single-byte extension (अधिकतम 256 अक्षर) है, इसलिए इसकी सीमाएँ हैं
- UTF-16/UTF-32 में ASCII compatibility नहीं है
- 'A' (U+0041): UTF-16 में
00 41, UTF-32 में 00 00 00 41
बोनस: UTF-8 Playground
अभी कोई टिप्पणी नहीं है.