个性化阅读
专注于IT技术分析

如何在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:
        // 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;
}

大块

如果你的数据块很大, 则可能需要使用一种对大数据正确工作的方法(异步方法)。在这种情况下, 我们将创建包含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 format
var myuint8Arr = new Uint8Array([72, 101, 108, 108, 111, 32, 33]);

largeuint8ArrToString(myuint8Arr, function(text){
    // Hello
    console.log(text);
});

注意:如前所述, 仅当处理大量数据集时, 才建议使用此方法。

玩得开心

赞(0)
未经允许不得转载:srcmini » 如何在JavaScript中将Uint8Array转换为字符串

评论 抢沙发

评论前必须登录!