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

标签 node.js base64 decode

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

相关文章:

node.js - 如何在express js中将图像文件发布到其他服务器?

javascript - 简单的功能和值的改变

c# - Base-64 字符数组的长度无效

php - 在 PHP 中从/Filter/FlateDecode PDF 流中提取数据

sql - oracle解码的查找表?

node.js - 为什么我看到一个新的 sess : key in redis on every request?

javascript - 在 JS 中进行 Base64 编码并在 PHP 中进行解码时出现变音问题

python - base64 编码二进制字符串在 NodeJS 和 Python 中返回不同的值

c++ - Windows 媒体基金会 : current media type change

node.js - 无法从 shell 连接到 mongodb