স্থানীয়ভাবে জাভাস্ক্রিপ্টে এটি করার কোনও উপায় নেই। ( আধুনিক পদ্ধতির জন্য রিকার্ডো গালির উত্তর দেখুন ))
Historicalতিহাসিক রেফারেন্সের জন্য বা যেখানে টেক্সট এনকোডার এপিআইগুলি এখনও অনুপলব্ধ ।
আপনি যদি চরিত্রের এনকোডিংটি জানেন তবে আপনি এটি নিজেই গণনা করতে পারেন।
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 আপনি যে অতিরিক্ত বাইটগুলি ইউটিএফ -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);
}