簡體   English   中英

節點編碼和解碼utf-16緩沖區

[英]node encode and decode utf-16 buffer

我正在開發一個需要與C ++ tcp / udp套接字通信的javascript / nodejs應用程序。 好像我從舊的C ++客戶端獲得了一個utf16緩沖區。 我現在沒有找到解決方案將其轉換為可讀字符串,另一個方向似乎是同樣的問題。

這兩個方向有一個簡單的方法嗎?

美好祝願

如果你有一個UTF-16編碼的緩沖區,你可以將它轉換為UTF-8字符串,如下所示:

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

要從流中讀取這些內容,最簡單的方法是在最后使用convert to string:

let chunks = [];
stream.on('data', chunk => chunks.push(chunk))
      .on('end',  ()    => {
        let buffer = Buffer.concat(chunks);
        let string = buffer.toString('utf16le');
        ...
      });

要將JS字符串轉換為UTF-16:

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

單緩沖區

如果您有一個Buffer,則可以使用其toString方法,該方法將使用特定編碼將全部或部分二進制內容轉換為字符串。 如果您不提供參數,則默認為utf8,但我在此示例中明確設置了編碼。

var req = http.request(reqOptions,function(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,function(res){... var decoder = new StringDecoder('utf8');

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

}); 如果您有一個Buffer,則可以使用其toString方法,該方法將使用特定編碼將全部或部分二進制內容轉換為字符串。 如果您不提供參數,則默認為utf8,但我在此示例中明確設置了編碼。

var req = http.request(reqOptions,function(res){...

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

});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM