2016-11-04 11 views
1

私はC++ TCP/UDPソケットと話す必要のあるjavascript/nodejsアプリケーションで作業しています。私は古いC++クライアントからutf16バッファを取得するようです。私はすぐにそれを可読な文字列に変換する解決策を見出さなかったし、他の方向も同じ問題であるようだ。ノードはUTF-16バッファをエンコードしてデコードします

この2つの方向に簡単な方法はありますか?

ニースの挨拶

答えて

1

シングルバッファ

あなたが特定のエンコーディングを使って文字列にバイナリコンテンツの全部または一部を変換するそのtoStringメソッドを使用することができ、単一のバッファを持っている場合。パラメータを指定しないと、デフォルトではutf8になりますが、この例ではエンコードを明示的に設定しています。

するvar 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;

するvar REQ = http.request(reqOptions、関数(RES){... VARデコーダ=新しいStringDecoder( 'UTF8');

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

})。 バッファが1つの場合は、そのバイナリコンテンツのすべてまたは一部を特定のエンコーディングを使用して文字列に変換するtoStringメソッドを使用できます。パラメータを指定しないと、デフォルトではutf8になりますが、この例ではエンコードを明示的に設定しています。

するvar 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'); 

、それはで文字列に変換を使用するのが最も簡単です非常に終わり:UTF-16へのJS文字列を変換するには

let buffer = Buffer.from(string, 'utf16le') 
関連する問題