我已经使用缓冲区解码了 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
进行内部格式化。 (参见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
对象。
关于Node.js:不同的缓冲区输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17835003/