देवनागरी में हर दिखने वाला अक्षर एक ही यूनिकोड कोड पॉइंट नहीं होता — स्वर मात्राएँ अलग कोड पॉइंट के रूप में जुड़ती हैं, इसलिए "हिन्दी" जैसा दिखने में तीन-चार अक्षरों वाला शब्द भी एस्केप रूप में इससे कहीं ज़्यादा \uXXXX कोड में बदल सकता है।
एक "अक्षर" कई कोड पॉइंट क्यों हो सकता है
उदाहरण के लिए "हिं" जैसा एक दिखने वाला अक्षर-समूह असल में व्यंजन, स्वर मात्रा और अनुस्वार जैसे अलग-अलग कोड पॉइंट के मेल से बनता है, और हर एक को एन्कोडिंग में अलग एस्केप कोड मिलता है। इसका मतलब यह है कि किसी हिंदी स्ट्रिंग में "दिखने वाले अक्षरों" की गिनती और असल कोड पॉइंट की गिनती अक्सर मेल नहीं खाती।
JSON और एस्केप अनुक्रम
JSON विनिर्देश किसी स्ट्रिंग के किसी भी वर्ण को \uXXXX के रूप में एस्केप करने की अनुमति देता है। यह अक्सर तब होता है जब डेटा प्रोग्रामेटिक रूप से बनाया जाता है और सीरियलाइज़र संगतता के लिए जानबूझकर ASCII से बाहर के वर्णों से बचता है — तब "नमस्ते" जैसा एक साधारण अभिवादन भी JSON में लगातार कई एस्केप कोड के अनुक्रम जैसा दिख सकता है।
कब ज़रूरत होती है
- किसी API की JSON प्रतिक्रिया में एस्केप अनुक्रमों के पीछे छिपे टेक्स्ट को सामान्य भाषा में पढ़ना।
- ऐसे वातावरण के लिए स्ट्रिंग तैयार करना जो ASCII से बाहर के वर्ण स्वीकार नहीं करता।
- बाहरी डेटा के साथ काम करते समय एन्कोडिंग समस्याओं का निदान करना, ख़ासकर जब कोई मात्रा गलती से अलग हो जाए।
बेसिक प्लेन से बाहर के वर्ण (इमोजी)
देवनागरी की मात्राएँ और संयुक्ताक्षर बेसिक मल्टीलिंगुअल प्लेन के भीतर ही आते हैं, इसलिए हर कोड पॉइंट को एक ही एस्केप कोड चाहिए। इमोजी इसके बाहर होते हैं और जावास्क्रिप्ट में दो एस्केप कोड — \ud83d\ude00 जैसा सरोगेट पेयर — से एन्कोड होते हैं, जो देवनागरी के किसी भी वर्ण के साथ नहीं होता।