UTF-16 बाइट ऐरे
जावास्क्रिप्ट यूटीएफ -16 के रूप में तार को एनकोड करता है , जैसे सी # UnicodeEncoding, इसलिए बाइट सरणियों को बिल्कुल उपयोग करके मिलान करना चाहिए charCodeAt(), और प्रत्येक लौटे बाइट जोड़ी को 2 अलग-अलग बाइट्स में विभाजित करना चाहिए , जैसे कि:
function strToUtf16Bytes(str) {
const bytes = [];
for (ii = 0; ii < str.length; ii++) {
const code = str.charCodeAt(ii);
bytes.push(code & 255, code >> 8);
}
return bytes;
}
उदाहरण के लिए:
strToUtf16Bytes('🌵');
हालाँकि, यदि आप UTF-8 बाइट सरणी प्राप्त करना चाहते हैं, तो आपको बाइट्स को ट्रांसकोड करना होगा।
UTF-8 बाइट ऐरे
समाधान कुछ गैर-तुच्छ लगता है, लेकिन मैंने बड़ी सफलता ( मूल स्रोत ) के साथ उच्च-यातायात उत्पादन वातावरण में नीचे दिए गए कोड का उपयोग किया ।
इसके अलावा, इच्छुक पाठक के लिए, मैंने अपने यूनिकोड सहायकों को प्रकाशित किया जो मुझे PHP जैसी अन्य भाषाओं द्वारा रिपोर्ट की गई स्ट्रिंग लंबाई के साथ काम करने में मदद करते हैं।
export function strToUtf8Bytes(str) {
const utf8 = [];
for (let ii = 0; ii < str.length; ii++) {
let charCode = str.charCodeAt(ii);
if (charCode < 0x80) utf8.push(charCode);
else if (charCode < 0x800) {
utf8.push(0xc0 | (charCode >> 6), 0x80 | (charCode & 0x3f));
} else if (charCode < 0xd800 || charCode >= 0xe000) {
utf8.push(0xe0 | (charCode >> 12), 0x80 | ((charCode >> 6) & 0x3f), 0x80 | (charCode & 0x3f));
} else {
ii++;
charCode = 0x10000 + (((charCode & 0x3ff) << 10) | (str.charCodeAt(ii) & 0x3ff));
utf8.push(
0xf0 | (charCode >> 18),
0x80 | ((charCode >> 12) & 0x3f),
0x80 | ((charCode >> 6) & 0x3f),
0x80 | (charCode & 0x3f),
);
}
}
return utf8;
}