2016-11-04 59 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')