2013-07-24 110 views
2

我已经破译使用缓冲区base64编码字符串,现在我已经发现了一些有趣的Node.js的:不同的缓冲输出

能正常工作,输出解码字符串UTF8

decoded = new Buffer(data.content, 'base64') 
console.log('Decoded:' + decoded); 
// outputs content of a markdown file 

然而,这种输出的十六进制字符:

decoded = new Buffer(data.content, 'base64') 
console.log(decoded); 
// outputs<Buffer 23 20 33 30 32 34 20 66 ...> 

这是为什么还是什么我做错了什么?不应该输出相同吗?

回答

2

console.log的参数在node.js中使用util.format进行内部格式化。 (见https://github.com/joyent/node/blob/v0.11.4/lib/console.js的第52行)

当您拨打console.log(obj);时,obj直接传递给util.format内部。当您调用console.log('Decoded: '+obj)时,首先在obj上调用字符串连接强制.toString(),然后在内部将生成的组合字符串传递给util.format

因此,在第一种情况下,node.js格式化String对象,在第二种情况下,它直接格式化Buffer对象。

-1

Mozilla Javascript Docs

每个对象都有时 对象被表示为文本值或者是自动调用一个toString()方法时,其目的在于 在以这样的方式称为预期一个字符串。

Node.js缓冲文档:Buffer#toString