我已经使用缓冲区解码了一个base64编码的字符串,现在我注意到了一些有趣的东西:
这很好,将解码后的字符串输出为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 ...>
为什么这或者我做错了什么?输出不应该是一样的吗?
console.log
的参数在node.js中使用util.format
进行内部格式化。(见第52行https://github.com/joyent/node/blob/v0.11.4/lib/console.js)
当您调用console.log(obj);
时,obj
会在内部直接传递给util.format
。调用console.log('Decoded: '+obj)
时,字符串串联会强制首先在obj
上调用.toString()
,然后在内部将生成的组合字符串传递给util.format
。
因此,在第一种情况下,node.js格式化String
对象,在第二种情况下直接格式化Buffer
对象。
来自Mozilla Javascript文档:
每个对象都有一个toString()方法,当对象将表示为文本值,或者当对象以期望字符串的方式来指代。
Node.js缓冲区文档:buffer#toString。