1. 程式人生 > >nodejs檔案讀取中文亂碼問題

nodejs檔案讀取中文亂碼問題

參考自《深入淺出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=''
; rs.on('data',function(trunk){ data+=trunk; }) rs.on('end',function(){ console.log(data); })
其實data+=trunk 相當於 data=data.toString()+trunk.toString();

解決方法一:

可讀流設定編碼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進行檔案讀取和網路傳輸,效能比直接純字串將近快一倍