最近做websocket的测试,需要将收到的数据转换成字符串,在网上找了好几个方法都不好使。同事给了一个函数,测试好用。写笔记记录一下。
funtion ArrayBufferUTF8ToStr(array) { var out,i,len,c; var char2,char3; if (array instanceof ArrayBuffer) { array = new Uint8Array(array); } 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; }