因爲項目須要,須要從一個已知的ArrayBuffer中讀取出字符串,雖然環境是typescript,但最終仍是用的js的代碼改了一下解決,typescript
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一次this
var bufView = new Uint8Array(bin); var encodedString = this.Utf8ArrayToStr(bufView); encodedString = decodeURIComponent(encodedString);
這方面找來的資料和網上的一些方法大可能是Unicode編碼處理,對UTF8無效,最後仍是在一個角落裏找來的解決,紀錄一下,省得給忘記了編碼