इसे मूल रूप से जावास्क्रिप्ट में करने का कोई तरीका नहीं है। ( आधुनिक दृष्टिकोण के लिए रिकार्डो गली का जवाब देखें ।)
ऐतिहासिक संदर्भ के लिए या जहां TextEncoder API अभी भी अनुपलब्ध हैं ।
यदि आप वर्ण एन्कोडिंग जानते हैं, तो आप इसे स्वयं गणना कर सकते हैं।
encodeURIComponent UTF-8 को चरित्र एन्कोडिंग के रूप में मानता है, इसलिए यदि आपको उस एन्कोडिंग की आवश्यकता है, तो आप कर सकते हैं,
function lengthInUtf8Bytes(str) {
// Matches only the 10.. bytes that are non-initial characters in a multi-byte sequence.
var m = encodeURIComponent(str).match(/%[89ABab]/g);
return str.length + (m ? m.length : 0);
}
इस तरह से काम करना चाहिए क्योंकि जिस तरह से यूटीएफ -8 मल्टी-बाइट अनुक्रम को एन्कोड करता है। पहला एन्कोडेड बाइट हमेशा सिंगल बाइट अनुक्रम के लिए शून्य के उच्च बिट के साथ शुरू होता है, या एक बाइट जिसका पहला हेक्स अंक सी, डी, ई, या एफ होता है। दूसरे और बाद के बाइट्स वे होते हैं जिनके पहले दो बिट्स 10 होते हैं उन अतिरिक्त बाइट्स को आप UTF-8 में गिनना चाहते हैं।
विकिपीडिया की तालिका इसे स्पष्ट करती है
Bits Last code point Byte 1 Byte 2 Byte 3
7 U+007F 0xxxxxxx
11 U+07FF 110xxxxx 10xxxxxx
16 U+FFFF 1110xxxx 10xxxxxx 10xxxxxx
...
यदि इसके बजाय आपको पृष्ठ एन्कोडिंग को समझने की आवश्यकता है, तो आप इस ट्रिक का उपयोग कर सकते हैं:
function lengthInPageEncoding(s) {
var a = document.createElement('A');
a.href = '#' + s;
var sEncoded = a.href;
sEncoded = sEncoded.substring(sEncoded.indexOf('#') + 1);
var m = sEncoded.match(/%[0-9a-f]{2}/g);
return sEncoded.length - (m ? m.length * 2 : 0);
}