这是我用来将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来解决这个问题,但不幸的是,这对我不起作用。
有谁知道为什么会这样?
好的,所以我能够找到问题的答案。我做的是,我写了另一个函数,通过用他们的键替换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';
而已。我希望它能帮助其他有类似问题的人。