我使用缓冲区解码了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 ...>
为什么这或我做错了什么?输出应该不一样吗?
答案 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)
每个对象都有一个自动调用的toString()方法 该对象将表示为文本值或对象是 以一种预期字符串的方式引用。
Node.js缓冲区文档:Buffer#toString。