如何在JavaScript中将Uint8Array转换为字符串

本文概述

  • 小串
  • 浏览器实施
  • 跨平台方法
  • 大块
在使用node.js或其他JavaScript平台(多操作性)时, 你会发现某些方法决定返回不同于字符串的内容。 Uint8Array是一个类型化的数组, 表示8位无符号整数的数组。
以下方法列表提供了将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转换为字符串】玩得开心

    推荐阅读