【问题标题】:Node.js: Differing buffer outputNode.js:不同的缓冲区输出
【发布时间】:2023-03-04 22:25:01
【问题描述】:

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

为什么会这样或者我做错了什么?输出不应该一样吗?

【问题讨论】:

    标签: node.js base64 decode


    【解决方案1】:

    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() 首先在obj 上调用,然后在内部将生成的组合字符串传递给util.format

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

    【讨论】:

      【解决方案2】:

      来自Mozilla Javascript Docs

      每个对象都有一个 toString() 方法,当 该对象将被表示为一个文本值或当一个对象是 以预期字符串的方式引用。

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

      【讨论】:

        猜你喜欢
        • 2017-12-24
        • 1970-01-01
        • 2021-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-15
        相关资源
        最近更新 更多