nodejsファイルは中国語の文字化け問題を読みます.

3857 ワード

『深入浅出nodejs』より参考
Bufferオブジェクトは配列に似ています.要素は16進数の2桁、0-255の値は2進数で、文字列と符号化の関係があります.
Bufferオブジェクトは文字列と相互に変換できます.現在サポートされています.ASCII、UTF-8、UTF-16 LE/UCS-2、Base 64、Binary、Hex
buffer:new Bufferに変わります.
文字列に変換:buf.toString([encoding],[start],[end])
文字化けが発生しました.
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.set Enccoding;
var rs=fs.createReadStream('test.md');
rs.setEncoding('utf8');
解決方法2:
いくつかの小さなバfferをつなぎ合わせて大きなバfferにします.
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を使用してファイル読み込みとネットワーク転送を行い、直接の純粋な文字列よりも性能が倍近く速いです.