gpt4 book ai didi

javascript - 如何将数组缓冲区转换为字符串

转载 作者:行者123 更新时间:2023-11-30 06:59:14 25 4
gpt4 key购买 nike

我在 node.js 上编写了一个简单的 TCP 服务器,用于将一些数据发送到 Chrome 应用程序。在 chrome 应用程序中,当我获取数据时,我使用以下函数将其转换为字符串,但出现异常“Uint16Array 的字节长度应为 2 的倍数

String.fromCharCode.apply(null, new Uint16Array(buffer))

我找不到任何有关可能导致此问题的原因以及如何解决此问题的信息。非常感谢任何关于此的指示。

下面是node.js服务端向客户端发送数据的代码:

socket.on('data', function(data) {

console.log('DATA ' + socket.remoteAddress + ': ' + data);
// Write the data back to the socket,
// the client will receive it as data from the server
var r= socket.write('from server\r\n');

});

以下是来自 chrome 应用程序的代码:

  chrome.sockets.tcp.onReceive.addListener(function (info) {
console.log('onListener registered');
if (info.socketId != socketid)
return;
else {
try {

data = ab2str(info.data);
console.log(data);
}
catch (e) {
console.log(e);
}

}
// info.data is an arrayBuffer.
});

function ab2str(buf) {
return String.fromCharCode.apply(null, new Uint16Array(buf));
}

最佳答案

假设编码是 UTF-8,现代(Chrome 38+)的方法是:

var decoder = new TextDecoder("utf-8");

function arrayBufferToString(buffer) {
return decoder.decode(new Uint8Array(buffer));
}

这使用了 TextDecoder API;见documentation更多选项,例如不同的编码。

另请参阅:Easier ArrayBuffer<->String conversion with the Encoding API@ Google Developers

关于javascript - 如何将数组缓冲区转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26754486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com