我使用Formidable将文件上传到我的Node-js网络服务器(本地安装进行测试)。在我上传文件之前,文件在ansi(iso-8859-1)中,它仍然是在上传之后,我使用Notepad ++检查了文件。
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"));
});
一旦我使用流或插件(在这种情况下为fast-csv)使用节点fs来流式传输内容,编码就会变得拙劣。看下面的数据,?应该是丹麦人的角色ø。
{adresse: 'Niver?d By, Karlebo'}
谁能告诉我为什么?
更新
通过流式传输上传的文件并使用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'});
});