如何将二进制数据从binaryjs转换为string/文本

我的BinaryJS webclient接收二进制数据,我如何将其转换回服务器发送的文本input?

创buildWebSocket的服务器(使用NodeJS)使用BinaryJS,因为它获取数据以stream的forms传输,并且我想使用Websocketstream将数据转发给客户端。

Web客户端看起来如下:

<html> <head> <script src="http://cdn.binaryjs.com/0/binary.js"></script> <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.js"></script> <script src="text-encoding/lib/encoding.js"></script> <script src="decode.js"></script> <script> // Connect to Binary.js server var client = new BinaryClient('ws://localhost:9000'); // Received new stream from server! client.on('stream', function(stream, meta){ // Buffer for parts // Got new data stream.on('data', function(data){ $( ".inner" ).append(data+"<br />"); }); stream.on('end', function(){ }); }); </script> </head> <body> <div class="inner">Output:</div> </body> </html> 

可悲的是我的输出不是input文本,而只是这样的:

 [object ArrayBuffer] 

编辑:find一个可能的解决scheme

由于数据是UTF-8编码的,我可以简单地使用某人在另一个问题中发布的函数对其进行解码:

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

这里有两种情况:

我假设你指的是这个问题: Uint8Array在Javascript中的string

请注意, fromCharCode答案明确表示,它不能正确解码UTF8。 你最好的select是使用FileReader解码ArrayBuffer。 你也不正确地处理data处理程序中的这个内容,而不是你应该先聚合它。

 client.on('stream', function(stream, meta){ var parts = []; stream.on('data', function(data){ parts.push(data); }); stream.on('end', function(){ var blob = new Blob(parts); var reader = new FileReader(); reader.onload = function(){ $( ".inner" ).append(reader.result + "<br />"); }; reader.readAsText(blob); }); }); 

现在说,我的实际build议是,你不使用Binary.js这个案件。 整个过程就是传输二进制数据。 如果您打算主要传输文本,则应该考虑使用更多面向文本的库,如Socket.IO。