export function utf8ByteToUnicodeStr(utf8Bytes) { var unicodeStr = ""; for (var pos = 0; pos < utf8Bytes.length; ) { var flag = utf8Bytes[pos]; var unicode = 0; if (flag >>> 7 === 0) { unicodeStr += String.fromCharCode(utf8Bytes[pos]); pos += 1; } else if ((flag & 0xfc) === 0xfc) { unicode = (utf8Bytes[pos] & 0x3) << 30; unicode |= (utf8Bytes[pos + 1] & 0x3f) << 24; unicode |= (utf8Bytes[pos + 2] & 0x3f) << 18; unicode |= (utf8Bytes[pos + 3] & 0x3f) << 12; unicode |= (utf8Bytes[pos + 4] & 0x3f) << 6; unicode |= utf8Bytes[pos + 5] & 0x3f; unicodeStr += String.fromCodePoint(unicode); pos += 6; } else if ((flag & 0xf8) === 0xf8) { unicode = (utf8Bytes[pos] & 0x7) << 24; unicode |= (utf8Bytes[pos + 1] & 0x3f) << 18; unicode |= (utf8Bytes[pos + 2] & 0x3f) << 12; unicode |= (utf8Bytes[pos + 3] & 0x3f) << 6; unicode |= utf8Bytes[pos + 4] & 0x3f; unicodeStr += String.fromCodePoint(unicode); pos += 5; } else if ((flag & 0xf0) === 0xf0) { unicode = (utf8Bytes[pos] & 0xf) << 18; unicode |= (utf8Bytes[pos + 1] & 0x3f) << 12; unicode |= (utf8Bytes[pos + 2] & 0x3f) << 6; unicode |= utf8Bytes[pos + 3] & 0x3f; unicodeStr += String.fromCodePoint(unicode); pos += 4; } else if ((flag & 0xe0) === 0xe0) { unicode = (utf8Bytes[pos] & 0x1f) << 12; unicode |= (utf8Bytes[pos + 1] & 0x3f) << 6; unicode |= utf8Bytes[pos + 2] & 0x3f; unicodeStr += String.fromCharCode(unicode); pos += 3; } else if ((flag & 0xc0) === 0xc0) { //110 unicode = (utf8Bytes[pos] & 0x3f) << 6; unicode |= utf8Bytes[pos + 1] & 0x3f; unicodeStr += String.fromCharCode(unicode); pos += 2; } else { unicodeStr += String.fromCharCode(utf8Bytes[pos]); pos += 1; } } return unicodeStr; }