我从源接收数据为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
在此,我希望buffer2
与buffer1
完全相同。
如何将utf8
字符串转换为原始二进制文件Buffer
?
答案 0 :(得分:7)
由于utf8的工作方式(特别是当用\ufffd
替换无效的utf8字符时),您不能指望转换为utf8并再次返回的二进制数据与原始二进制数据相同。
您必须使用另一种正确保留数据的格式。这可以是'hex','base64','binary'或第三方模块提供的其他二进制安全格式。显然,如果可以的话,你应该将它保留为缓冲区。