【发布时间】:2014-05-21 03:04:57
【问题描述】:
我使用 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"));
});
只要我使用流或使用节点 fs 流式传输内容的插件(在本例中为 fast-csv),编码就会出错。看下面的数据,?应该是丹麦字符 ø。
{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'});
});
【问题讨论】:
标签: node.js character-encoding