如何在Node.js中stream式处理文件并将编码保持为ansi(windows-1252)

我使用Formidable将file upload到我的Node-js Web服务器(本地安装进行testing)。 该文件是在我上传之前在ansi(ISO-8859-1),它仍然是上传时,我用记事本++检查该文件。

var form = new formidable.IncomingForm(); form.parse(req, function(err, fields, files) { csv .fromPath(files.upfile.path, {headers: true}) .on("record", function(data){ console.log(data.adresse); }) .on("end", function(){ console.log("done"); }); res.end(console.log("form done")); }); 

只要我使用stream或插件(在这种情况下,fast-csv)使用节点fsstream内容,编码是拙劣的。 看到下面的数据, 应该是丹麦字符ø。

 {adresse: 'Niver?d By, Karlebo'} 

谁能告诉我为什么?

更新:

它通过stream媒体上传的文件,并使用Iconv转换它。

 router.post('/upload', function(req, res) { var form = new formidable.IncomingForm(); form.parse(req, function(err, fields, files) { console.log(files.upfile.path); var stream = fs.createReadStream(files.upfile.path); var csvStream = csv({headers : true}) .on("record", function(data){ var db = req.db; // Set our collection var collection = db.get('bbrcollection'); // Submit to the DB collection.insert(data, function (err, doc) { //console.log(data); if (err) { // If it failed, return error console.log("There was a problem adding the information to the database."); } }); }) .on("end", function(){ console.log("done"); }); stream .pipe(new Iconv('WINDOWS-1252', 'UTF-8')) .pipe(csvStream); }); res.render('upload', { title: 'upload file'}); }); 

您必须将编码转换为utf8才能使用javascript中的内容。 iconv和iconv-lite都应该能够为你做到这一点。