由于项目需要,需要从一个已知的ArrayBuffer中读取出字符串,虽然环境是typescript,但最终还是用的js的代码改了一下解决,
public Utf8ArrayToStr(array):string { var out,i,len,c; var char2,char3; out = ""; len = array.length; i = 0; while(i < len) { c = array[i++]; switch(c >> 4) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: // 0xxxxxxx out += String.fromCharCode(c); break; case 12: case 13: // 110x xxxx 10xx xxxx char2 = array[i++]; out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); break; case 14: // 1110 xxxx 10xx xxxx 10xx xxxx char2 = array[i++]; char3 = array[i++]; out += String.fromCharCode(((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0)); break; } } return out; }
有必要的话,可能还得decodeURIComponent一次
var bufView = new Uint8Array(bin); var encodedString = this.Utf8ArrayToStr(bufView); encodedString = decodeURIComponent(encodedString);
这方面找来的资料和网上的一些方法大多是Unicode编码处理,对UTF8无效,最后还是在一个角落里找来的解决,纪录一下,免得给忘记了