2016-11-04 47 views
1

即时通讯工作在需要与C++ tcp/udp套接字交谈的javascript/nodejs应用程序。看来我从旧的C++客户端获得了一个utf16缓冲区。我现在没有找到解决方案将其转换为可读的字符串,而另一个方向似乎是同一个问题。节点编码和解码utf-16缓冲区

这两个方向是否有简单的方法?

尼斯问候

回答

1

单个缓冲区

如果你有一个缓冲区,你可以使用它的toString方法将使用特定编码的二进制内容全部或部分转换为字符串。如果你没有提供参数,它默认为utf8,但在这个例子中我明确地设置了编码。

变种REQ = http.request(reqOptions,函数(RES){ ...

res.on('data', function(chunk) { 
    var textChunk = chunk.toString('utf8'); 
    // process utf8 text chunk 
}); 

});

流传输缓冲器

如果已在上述其中一个多字节UTF8字符的第一个字节可以包含在所述第一缓冲器(块)的问题流缓冲器等,并且在第二个字节第二个缓冲区,那么你应该使用一个StringDecoder。 :

var StringDecoder = require('string_decoder')。StringDecoder;

变种REQ = http.request(reqOptions,函数(RES){ ... 变种解码器=新StringDecoder( 'UTF8');

res.on('data', function(chunk) { 
    var textChunk = decoder.write(chunk); 
    // process utf8 text chunk 
}); 

}); 如果你有一个缓冲区,你可以使用它的toString方法,它将使用特定的编码将全部或部分二进制内容转换为字符串。如果你没有提供参数,它默认为utf8,但在这个例子中我明确地设置了编码。

变种REQ = http.request(reqOptions,函数(RES){ ...

res.on('data', function(chunk) { 
    var textChunk = chunk.toString('utf8'); 
    // process utf8 text chunk 
}); 

});

3

如果你有一个UTF-16编码的缓冲区,你可以将其转换为UTF-8字符串是这样的:

let string = buffer.toString('utf16le'); 

从流中读取这些,这是最容易使用转换为字符串在尽头:

要一个JS字符串转换为UTF-16:

let buffer = Buffer.from(string, 'utf16le')