#javascript #node.js #express
Вопрос:
На моей веб-странице я могу экспортировать данные в csv-файл, который мы можем открыть и прочитать в Excel. Но я заметил, что каждый символ нравится ô
или Ø
не поддерживается. Например, вместо Ø
того , чтобы, у меня есть Ø
.
Я хотел бы предотвратить это, но в данный момент я не могу этого сделать.
app.js :
app.post("/exportLibelles", function(req, res) {
try {
dao.exportLibelle().then((value) => {
res.attachment(__dirname '/ExportLibelle.csv');
res.status(200).send(value);
})
} catch (e) {
console.log(e);
}
})
Функция exportLibelle :
async exportLibelle() {
try {
let request = "SELECT * FROM PROFACE.dbo.ParametresMachines;"
let results = await sql.query(request);
return this.convertToCSV(JSON.stringify(results.recordset))
} catch (e) {
console.log(e);
}
}
convertToCSV(objArray) {
var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
var str = '', header = '';
for (var i = 0; i < array.length; i ) {
var line = '';
for (var index in array[i]) {
if (i == 0) {
if (header != '') {
header = ';'
}
header = index;
}
if (line != '') {
line = ';'
}
line = array[i][index];
}
str = line 'rn';
}
return (header 'rn' str);
}
Я пытался использовать encodeURI()
или encodeURIComponent()
как это :
convertToCSV(objArray) {
var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
var str = '', header = '';
for (var i = 0; i < array.length; i ) {
var line = '';
for (var index in array[i]) {
if (i == 0) {
if (header != '') {
header = ';'
}
header = index;
}
if (line != '') {
line = ';'
}
line = array[i][index];
}
str = line 'rn';
}
let csv = header 'rn' str;
csv = 'data:text/csv;charset=utf-8,;' csv;
return encodeURI(csv);
}
С помощью этого кода, когда я открываю csv-файл, все данные находятся в одной строке, а слова с символом выглядят так Tampon GO Ø 3.8 amp; 12
, а Tampon GO Ø 3.8 amp; 12
не так .
Ответ №1:
Недавно у меня была довольно похожая проблема, и я смог ее решить, добавив спецификацию utf-8 ( ufeff
) в csv-строку. Только с помощью этого Excel смог правильно интерпретировать его.
Так что в вашем случае попробуйте:
convertToCSV(objArray) {
//...
return ('ufeff' header 'rn' str);
}
и в вашем контроллере:
dao.exportLibelle().then((value) => {
res.setHeader('Content-disposition', 'attachment; filename=ExportLibelle.csv');
res.set('Content-Type', 'text/csv');
res.status(200).send(value);
})
Комментарии:
1. К сожалению, у меня все еще есть те же проблемы с символами …
2. Ладно, это странно. Вы уверены, что данные в вашей базе данных закодированы в кодировке utf-8?
3. Я думаю, что эта проблема возникает у меня только при экспорте данных. В противном случае, на веб-странице или в MSSM я могу видеть все символы
4. Хм, ты можешь попробовать еще кое-что? Отмените мое изменение с помощью спецификации и просто установите тип содержимого в:
res.set('Content-Type', 'text/csv;charset=windows-1252');