2

我已经使用缓冲区解码了一个 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 ...>

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

4

2 回答 2

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)字符串连接,然后将生成的组合字符串传递给内部。.toString()objutil.format

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

于 2013-07-24T21:42:14.743 回答
-1

来自Mozilla Javascript 文档

每个对象都有一个 toString() 方法,当对象被表示为文本值或以期望字符串的方式引用对象时,该方法会自动调用。

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

于 2013-07-24T13:25:51.393 回答