在Javascript中将Uint8Array转换为字符串

263

我有一些在JavaScript中作为Uint8Array元素范围存在的UTF-8编码数据。是否有一种高效的方法将其解码为常规JavaScript字符串(我相信JavaScript使用16位Unicode)?我不想逐个字符添加,因为字符串连接将变得CPU密集。


不确定是否有效,但我在从暴露Uint8Array对象的BrowserFS读取文件时使用u8array.toString()。当您调用fs.readFile时,它会暴露Uint8Array对象。 - jcubic
15
对于Uint8Array对象,调用toString方法会返回逗号分隔的数字字符串,例如在Chrome 79中返回"91,50,48,49,57,45," - kolen
1
你可以使用 buffer.toString("utf8", start, end) 将 Node.js 中的 Buffer 转换为 JavaScript 字符串,其中 end = start + length。不幸的是,浏览器没有 Buffer,它们只有 Uint8Array。因此,对于浏览器,您可以使用 new TextDecoder().decode(uint8array.subarray(start, end))。这也适用于 Node.js,因为 BufferUint8Array 的子类。 - Aadit M Shah
21个回答

-3
我正在使用这个Typescript片段:
function UInt8ArrayToString(uInt8Array: Uint8Array): string
{
    var s: string = "[";
    for(var i: number = 0; i < uInt8Array.byteLength; i++)
    {
        if( i > 0 )
            s += ", ";
        s += uInt8Array[i];
    }
    s += "]";
    return s;
}

如果您需要JavaScript版本,请删除类型注释。 希望这可以帮到您!


5
OP要求不要逐个添加字符。此外,他不想将其显示为列表的字符串表示,而只是作为一个字符串。这也不会将字符转换为字符串,而是显示它的数字。 - Albert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接