द्विआधारी से टेक्स्ट: बाइट खोलना, और यह जानना कि नहीं खुलेगा
यह रूपांतरण क्या करता है
यह द्विआधारी बाइटों के क्रम को पढ़कर उन्हें UTF-8 टेक्स्ट के रूप में डिकोड करता है। आठ बिट की एक बाइट बनती है, फिर बाइटों को साथ डिकोड किया जाता है, क्योंकि एक अक्षर उनमें से कई पर फैल सकता है। असली मेहनत इसी डिकोडिंग में है: बाइट की सीमाएँ अक्षर की सीमाओं के बारे में कुछ नहीं बतातीं।
डिकोडर को पता कैसे चलता है कि अक्षर कहाँ ख़त्म होता है
हर बाइट की शुरुआती बिट उसका काम बता देती हैं। 0 से शुरू होने वाली बाइट अकेली चलती है, 110 से शुरू होने वाली दो बाइट का अक्षर खोलती है, 1110 तीन बाइट का और 11110 चार बाइट का, जबकि जारी रखने वाली बाइट 10 से शुरू होती हैं। यही ढाँचा डिकोडर को बिना बताए स्ट्रीम चलाने देता है, और यही ग़लत जगह से कटी स्ट्रीम को पकड़ में लाता है।
द्विआधारी से टेक्स्ट तालिका
बाइट क्रम और वह टेक्स्ट जो वे डिकोड करते हैं। बहु-बाइट पंक्तियाँ शुरुआती बिट का पैटर्न काम करते हुए दिखाती हैं, और आख़िरी पंक्ति बताती है कि जो बाइट असल में छपने लायक टेक्स्ट नहीं हैं वे कैसे दिखते हैं।
| द्विआधारी | टेक्स्ट |
|---|---|
| 01000001 | A |
| 01100001 | a |
| 01001000 01101001 | Hi |
| 01001111 01001011 | OK |
| 00110001 00110010 00110011 | 123 |
| 11100100 10111000 10101101 | 中 |
मोजीबेक कहाँ से आता है
बिगड़ा हुआ टेक्स्ट लगभग हमेशा इसका मतलब होता है कि बाइट ग़लत एन्कोडिंग से डिकोड हुई या ग़लत जगह से काटी गई। UTF-8 को एक-बाइट एन्कोडिंग की तरह डिकोड करने पर तीन बाइट का अक्षर तीन अनजाने चिह्न बन जाता है, और आगे से एक बाइट हटने पर उसके बाद का हर अक्षर खिसक जाता है। दोनों गड़बड़ियाँ एक जैसी बेतरतीब लगती हैं, और दोनों की जाँच अक्षरों के बजाय बाइट देखकर होती है।
बाइट के समूह साबुत रखें
आठ-आठ अंकों के पूरे समूह कॉपी करें। बाइट के बीच से चिपकाना शुरू करने पर डिकोडर के पास समझने लायक क्रम बचता ही नहीं, और उसके बाद आने वाला त्रुटि संदेश सही होता है पर यह नहीं बताता कि चिपकाना कहाँ से शुरू हुआ था।
अक्सर पूछे जाने वाले सवाल
द्विआधारी को वापस टेक्स्ट में कैसे डिकोड करें?
द्विआधारी को आठ-आठ अंकों के समूहों में बाँटें, हर समूह को एक बाइट मानें, और बाइटों को UTF-8 के रूप में डिकोड करें। अक्षर A, 01000001 है, इसलिए एक समूह एक अक्षर बनता है; लंबा क्रम लंबी स्ट्रिंग बनाता है, जिसमें कुछ अक्षर कई समूहों पर फैले होते हैं।
अजीब अक्षरों के बजाय त्रुटि क्यों मिलती है?
क्योंकि वह बाइट क्रम वैध UTF-8 नहीं है — वह अधूरा कटा, क्रम से बाहर, या टेक्स्ट ही नहीं हो सकता। उसे अस्वीकार करना जानबूझकर है: दूसरा रास्ता प्रतिस्थापन चिह्न लगाना होता, जिससे ऐसा नतीजा बनता है जो डिकोडिंग की समस्या जैसा दिखता है, जबकि असली बात यह है कि वे बाइट कभी टेक्स्ट थे ही नहीं।
क्या बाइट के बीच स्पेस के बिना द्विआधारी चिपका सकता हूँ?
हाँ। जिस लगातार क्रम की लंबाई आठ की गुणज हो, वह अपने आप बाइटों में बँट जाता है, इसलिए बिना विभाजक वाले स्रोत से ली गई द्विआधारी बिना सँवारे बदल जाती है। स्पेस वाला और बिना स्पेस वाला रूप एक ही बात कहते हैं।
अकेली 127 से ऊपर की बाइट का क्या मतलब है?
यह बताती है कि वह किसी बहु-बाइट अक्षर का हिस्सा है, ख़ुद कोई अक्षर नहीं। इस दायरे की अकेली बाइट का कोई वैध UTF-8 अर्थ नहीं होता और उसे अस्वीकार कर दिया जाता है, जो सही व्यवहार है — जिस अक्षर की वह थी, वह अधूरा है।
क्या यह किसी भी भाषा के टेक्स्ट पर चलता है?
हाँ, हर उस चीज़ पर जो UTF-8 लिख सकता है, यानी मोटे तौर पर हर वर्तमान लिपि — नुक्ता वाली लातिनी वर्णमालाएँ, सिरिलिक, अरबी, चीनी, जापानी, कोरियाई और इमोजी तक। इस साइट के टेक्स्ट से द्विआधारी टूल से बना क्रम हमेशा ठीक उसी टेक्स्ट में वापस खुलेगा जिससे शुरुआत हुई थी।