},
_utf8_decode: function(utfarray) {
var str = '';
- var i = 0, c = 0, c1 = 0, c2 = 0;
+ var i = 0, c = 0, c1 = 0, c2 = 0, c3 = 0;
while (i < utfarray.length) {
str += String.fromCharCode(((c & 31) << 6) | (c1 & 63));
i += 2;
}
- else {
+ else if((c > 223) && (c < 240)) {
c1 = utfarray[i + 1];
c2 = utfarray[i + 2];
str += String.fromCharCode(((c & 15) << 12) | ((c1 & 63) << 6) | (c2 & 63));
i += 3;
}
-
+ else {//support 4 bytes characters e.g. Emojis
+ c1 = utfarray[i + 1];
+ c2 = utfarray[i + 2];
+ c3 = utfarray[i + 3];
+ str += String.fromCodePoint(((c & 7) << 18) | ((c1 & 63) << 12) | ((c2 & 63) << 6) | (c3 & 63));
+ i += 4;
+ }
}
return str;