2013-04-26 203 views
6

儘管Buffer的'binary'已被棄用,我必須使用它: 我寫了一個web應用程序,使用節點js + express。用戶可以下載文件,文件名亂碼會如果不使用node js的Buffer.toString('binary')

res.download(allpath,buf0.toString('binary')); 

腕錶的價值(是中國字符):

console.log(new Buffer('牛')); 

輸出:緩衝區,e7,89,9b

var buf0=new Buffer('牛'); 
console.log(new Buffer(buf0.toString('binary'))); 

輸出:緩衝液,C3,a7中,c2,89,c2,9b

這個算法是什麼意思,爲什麼使用二進制toString是工作?

回答

3

實際上,new Buffer('牛')new Buffer('牛', 'utf-8')的快捷方式。
因此,如果你想將它轉換回字符串,你必須使用toString('utf-8')

實施例:

console.log(new Buffer('牛')); 
// Output: <Buffer e7 89 9b> 

var buf0=new Buffer('牛'); 
console.log(new Buffer(buf0.toString('utf-8'))); 
// Output: <Buffer e7 89 9b> 

進一步閱讀:

+1

我的意思是:VAR = BUF0新緩衝區( '牛'); Res.download(allpath,buf0.toString('utf-8'))不正常(在瀏覽器中,出現亂碼)和 Var buf0 = new Buffer('牛'); res.download(allpath,buf0.toString('binary))是正常的。但是爲什麼?utf-8更改爲二進制文件? – user1625647 2013-04-27 02:34:47

+0

你能提供一堆帶有意義錯誤的代碼嗎?我不確定我是否理解你的真實問題。 – fsenart 2013-04-28 18:44:15