Node.js:不同的缓冲区输出

时间:2013-07-24 13:09:51

标签: node.js base64 decode

我使用缓冲区解码了base64编码的字符串,现在我注意到了 funny

这很好用,输出解码后的字符串为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 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:-1)

来自Mozilla Javascript Docs

  

每个对象都有一个自动调用的toString()方法   该对象将表示为文本值或对象是   以一种预期字符串的方式引用。

Node.js缓冲区文档:Buffer#toString