UTF-16 substr
Javascript does not correctly implement UTF-16 surrogate pairs. This function does.
by doug65536
JavaScript
function utf16Substr(data, start, len) {
var chars = [], dataLength = 0;
for (var i = 0; i < data.length; ++i, ++dataLength) {
var code = data.charCodeAt(i);
if (code >= 0xD800 && code < 0xDC00) {
// Surrogate pair
chars.push(data[i] + data[i+1]);
++i;
} else {
// Normal
chars.push(data[i]);
}
}
if (len === undefined) {
len = dataLength - start;
}
var end = start + len, result = '';
for (var i = start; i < end; ++i)
result += chars[i];
return result;
}
alert(utf16Substr("ðŸ˜ðŸ˜aðŸ˜ðŸ˜a", 2));