nodejs檔案讀取中文亂碼問題
阿新 • • 發佈:2019-02-20
參考自《深入淺出nodejs》
Buffer物件類似於陣列,元素為16進位制的兩位數,0-255的數值 是二進位制,與字串有編碼的關係
Buffer物件可以與字串之間相互轉換,目前支援:ASCII,UTF-8,UTF-16LE/UCS-2,Base64,Binary,Hex
轉為buffer: new Buffer(str,[encoding])
轉為字串:buf.toString([encoding],[start],[end])
亂碼發生在buffer的拼接
var fs=require('fs'); var rs=fs.createReadStream('test.md'); var data=''其實data+=trunk 相當於 data=data.toString()+trunk.toString();; rs.on('data',function(trunk){ data+=trunk; }) rs.on('end',function(){ console.log(data); })
解決方法一:
可讀流設定編碼readable.setEncoding(encoding);
var rs=fs.createReadStream('test.md'); rs.setEncoding('utf8');解決方法二:
把多個小buffer拼接成一個大Buffer
var chunks=[]; var size=0; res.on('data',function(chunk){ chunks.push(chunk); size+=chunk.length; }); res.on('end',function(){ var buf=Buffer.concat(chunks,size); var str=iconv.decode(buf,'utf8'); console.log(str); });使用Buffer進行檔案讀取和網路傳輸,效能比直接純字串將近快一倍