2

バッファを使用してbase64でエンコードされた文字列をデコードしましたが、何かおかしいことに気づきました:

これは正常に動作し、デコードされた文字列を utf8 として出力します

decoded = new Buffer(data.content, 'base64')
console.log('Decoded:' + decoded);
// outputs content of a markdown file

ただし、これは 16 進文字を出力します。

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()に呼び出されobj、結果として結合された文字列がutil.format内部的に渡されます。

したがって、最初のケースでは、node.js はStringオブジェクトをフォーマットしています。2 番目のケースでは、Bufferオブジェクトを直接フォーマットしています。

于 2013-07-24T21:42:14.743 に答える