2013-07-24 111 views
2

我已經破譯使用緩衝區base64編碼字符串,現在我已經發現了一些有趣的Node.js的:不同的緩衝輸出

能正常工作,輸出解碼字符串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 ...> 

這是爲什麼還是什麼我做錯了什麼?不應該輸出相同嗎?

回答

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)時,首先在obj上調用字符串連接強制.toString(),然後在內部將生成的組合字符串傳遞給util.format

因此,在第一種情況下,node.js格式化String對象,在第二種情況下,它直接格式化Buffer對象。

-1

Mozilla Javascript Docs

每個對象都有時 對象被表示爲文本值或者是自動調用一個toString()方法時,其目的在於 在以這樣的方式稱爲預期一個字符串。

Node.js緩衝文檔:Buffer#toString