这是我用来将HTML表导出到csv并下载的方法:
exportCSVFile: function (object) {
var processRow = function (row) {
var finalVal = '';
for (var j = 0; j < row.length; j++) {
var result = row[j];
if (j > 0) {
finalVal += ';';
}
finalVal += result;
}
return finalVal + '\n';
};
const {filename, table} = object;
var csvFile = '';
for (var i = 0; i < table.length; i++) {
csvFile += processRow(table[i]);
}
csvFile = new Blob([csvFile], {type: 'text/csv;charset=utf-8'});
var downloadCSV;
downloadCSV = document.createElement('a');
downloadCSV.download = filename;
downloadCSV.href = window.URL.createObjectURL(csvFile);
downloadCSV.style.display = 'none';
document.body.appendChild(downloadCSV);
downloadCSV.click();
document.body.removeChild(downloadCSV);
},
导出英语文档时,它工作得很好,但是当我尝试导出带有特殊字符(例如,é,è,ç,...)的法语文档时,会出现&eacute,&egrave ...
从SO来看,我发现有些人可以通过添加前缀`\ uFEFF来解决此问题,但不幸的是,这对我不起作用。
有人知道为什么会这样吗?
答案 0 :(得分:0)
好的,因此我能够找到问题的答案。我所做的是,我写了另一个函数,通过用其键替换HTML代码来解码HTML字符实体。
例如:
Préparation
变为préparation
。
这是有问题的函数:
decode: function(string) {
var map = {
'"': '"',
'à' : 'à',
'á' : 'á',
'â' : 'â',
'ã' : 'ã',
'ä' : 'ä',
'å' : 'å',
'æ' : 'æ',
'ç' : 'ç',
'è' : 'è',
'é' : 'é',
'ê' : 'ê',
'ë' : 'ë',
'ì' : 'ì',
'í' : 'í',
'î' : 'î',
'ï' : 'ï',
'À' : 'À',
'Á' : 'Á',
'Â' : 'Â',
'Ã' : 'Ã',
'Ä' : 'Ä',
'Å' : 'Å',
'Æ' : 'Æ',
'Ç' : 'Ç',
'È' : 'È',
'É' : 'É',
'Ê' : 'Ê',
'Ë' : 'Ë',
'Ì' : 'Ì',
'Í' : 'Í',
'Î' : 'Î',
'Ï' : 'Ï',
'\'' : '''
};
var entityMap = map;
for (var key in entityMap) {
var entity = entityMap[key];
var regex = new RegExp(entity, 'g');
string = string.replace(regex, key);
}
return string;
}
然后我刚刚在返回最终值之前在OP代码中对其进行了调用:
finalVal = DecodeUtils.decode(finalVal);
return finalVal + '\n';
就是这样。希望对其他有类似问题的人有所帮助。