节点缓冲区,从utf8到二进制

时间:2014-08-09 22:37:15

标签: node.js encoding utf-8 buffer

我从源接收数据为utf8,此数据最初是二进制形式(它是Buffer)。我必须将此数据转换回Buffer。我很难搞清楚如何做到这一点。

这是一个显示我问题的小样本:

var hexString = 'e61b08020304e61c09020304e61d0a020304e61e65';
var buffer1 = new Buffer(hexString, 'hex');

var str = buffer1.toString('utf8');
var buffer2 = new Buffer(str, 'utf8');

console.log('original content:', hexString);
console.log('buffer1 contains:', buffer1.toString('hex'));
console.log('buffer2 contains:', buffer2.toString('hex'));

打印

original content: e61b08020304e61c09020304e61d0a020304e61e65
buffer1 contains: e61b08020304e61c09020304e61d0a020304e61e65
buffer2 contains: efbfbd1b08020304efbfbd1c09020304efbfbd1d0a020304efbfbd1e65

在此,我希望buffer2buffer1完全相同。

如何将utf8字符串转换为原始二进制文件Buffer

1 个答案:

答案 0 :(得分:7)

由于utf8的工作方式(特别是当用\ufffd替换无效的utf8字符时),您不能指望转换为utf8并再次返回的二进制数据与原始二进制数据相同。

您必须使用另一种正确保留数据的格式。这可以是'hex','base64','binary'或第三方模块提供的其他二进制安全格式。显然,如果可以的话,你应该将它保留为缓冲区。