本文概述
- 小串
- 浏览器实施
- 跨平台方法
- 大块
以下方法列表提供了将Uint8Array转换为javascript中常规字符串的有效方法的集合。
小串对于小的数组(> = 100k个字符), 可以使用以下方法, 否则会出现RangeError异常:超出最大调用堆栈大小或堆栈空间不足。但是, 你需要知道此方法不适用于UTF-8字符。
function uint8arrayToStringMethod(myUint8Arr){return String.fromCharCode.apply(null, myUint8Arr);
}
浏览器实施如果你的JavaScript在浏览器中执行, 则可以使用TextEncoder和TextDecoder本机函数, 这些函数允许你选择要使用的编码。编码API有助于解决字符串转换问题。
/** * Convert an Uint8Array into a string. * * @returns {String} */function Decodeuint8arr(uint8array){return new TextDecoder("utf-8").decode(uint8array);
}/** * Convert a string into a Uint8Array. * * @returns {Uint8Array} */function Encodeuint8arr(myString){return new TextEncoder("utf-8").encode(myString);
}
跨平台方法以下方法非常有用, 效果很好。它不使用任何技巧, 也不依赖于Browser JS函数, 例如在其他JS环境中也可以使用。通过UTF-8约定工作。
// http://www.onicos.com/staff/iz/amuse/javascript/expert/utf.txt/* utf.js - UTF-8 <
=>
UTF-16 convertion * * Copyright (C) 1999 Masanao Izumo <
iz@onicos.co.jp>
* Version: 1.0 * LastModified: Dec 25 1999 * This library is free.You can redistribute it and/or modify it. */function Utf8ArrayToStr(array) {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:// 0xxxxxxxout += String.fromCharCode(c);
break;
case 12: case 13:// 110x xxxx10xx xxxxchar2 = array[i++];
out += String.fromCharCode(((c &
0x1F) <
<
6) | (char2 &
0x3F));
break;
case 14:// 1110 xxxx10xx xxxx10xx xxxxchar2 = array[i++];
char3 = array[i++];
out += String.fromCharCode(((c &
0x0F) <
<
12) |((char2 &
0x3F) <
<
6) |((char3 &
0x3F) <
<
0));
break;
}}return out;
}
大块如果你的数据块很大, 则可能需要使用一种对大数据正确工作的方法(异步方法)。在这种情况下, 我们将创建包含Uint8Array的blob, 然后使用文件读取器将其读取为文本。
/** * Converts an array buffer to a string * * @param {Uin8} uint8arr | The buffer to convert * @param {Function} callback | The function to call when conversion is complete */function largeuint8ArrToString(uint8arr, callback) {var bb = new Blob([uint8arr]);
var f = new FileReader();
f.onload = function(e) {callback(e.target.result);
};
f.readAsText(bb);
}// Usage example// "Hello" in Uint8Array formatvar myuint8Arr = new Uint8Array([72, 101, 108, 108, 111, 32, 33]);
largeuint8ArrToString(myuint8Arr, function(text){// Helloconsole.log(text);
});
注意:如前所述, 仅当处理大量数据集时, 才建议使用此方法。
【如何在JavaScript中将Uint8Array转换为字符串】玩得开心
推荐阅读
- 如何使用javascript向你的网页添加语音命令
- 如何使用JavaScript正确反转字符串
- 如何使用CSS在JavaScript控制台上自定义调试
- 什么是去抖动方法以及如何在JavaScript中使用它
- JS框架与VanillaJS(使用还是不使用框架())
- javascript中变量声明中LET和VAR有什么区别
- 我的软考历程网络规划师
- 软考过后看软考
- 网工在路上--一文弄懂MSTP协议