লৌরি ওহের্ডের উত্তরটি বন্যগুলিতে দেখা বেশিরভাগ স্ট্রিংয়ের জন্য ভাল কাজ করে, তবে যদি স্ট্রিংটিতে সারোগেট জুটির পরিসর, 0xD800 থেকে 0xDFFF এর মধ্যে একক অক্ষর থাকে তবে ব্যর্থ হয়। যেমন
byteCount(String.fromCharCode(55555))
এই আর ফাংশনটি সমস্ত স্ট্রিং পরিচালনা করতে হবে:
function bytes (str) {
var bytes=0, len=str.length, codePoint, next, i;
for (i=0; i < len; i++) {
codePoint = str.charCodeAt(i);
if (codePoint >= 0xD800 && codePoint < 0xE000) {
if (codePoint < 0xDC00 && i + 1 < len) {
next = str.charCodeAt(i + 1);
if (next >= 0xDC00 && next < 0xE000) {
bytes += 4;
i++;
continue;
}
}
}
bytes += (codePoint < 0x80 ? 1 : (codePoint < 0x800 ? 2 : 3));
}
return bytes;
}
যেমন
bytes(String.fromCharCode(55555))
এটি সরোগেট জোড়যুক্ত স্ট্রিংগুলির জন্য আকারটি সঠিকভাবে গণনা করবে:
bytes(String.fromCharCode(55555, 57000))
ফলাফলগুলি নোডের অন্তর্নির্মিত কার্যের সাথে তুলনা করা যেতে পারে Buffer.byteLength
:
Buffer.byteLength(String.fromCharCode(55555), 'utf8')
Buffer.byteLength(String.fromCharCode(55555, 57000), 'utf8')