我正在我的网站上导出CSV功能。数据是西班牙语,因此会有很多重音字符,这个问题的一个例子是标题“Año”(年份),但在excel上显示为“Año”。
这是我使用javascript导出的代码:
HTML
<a href="#" class="btn" id="export-btn"> Export</a>
<a href="#" class="btn" id="download" style="display:none"> Download Now </a>
JS
$(document).on('click', '#export-btn', function(e) {
var _this = $(this);
_this.attr('disabled',true);
var datenow = new Date();
datenow = datenow.getTime();
var exportdata = ConvertToCSV(exportdata);
$('#download').attr("href", "data:text/csv;charset=utf8," + encodeURIComponent(exportdata) );
$('#download').attr("download", "InTrack-Report-"+datenow+".csv");
$('#download').show(); //show download button
_this.attr('disabled',false);
});
这是 ConvertToCSV 函数,我添加了sep=;
以使excel将分号识别为分隔符。
function ConvertToCSV(objArray) {
var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
var str = 'sep=;\r\n'; //tell excel that we used semicolon as separator
//header
var line = '';
for (var i = 0; i < array.Fields.length; i++) {
if (line != '') line += ';'
line += array.Fields[i]['Title'];
}
str += line + '\r\n';
//rows
for (var i = 0; i < array.Rows.length; i++) {
var line = '';
for (var index in array.Rows[i]) {
if (line != '') line += ';'
line += array.Rows[i][index];
}
str += line + '\r\n';
}
return str;
}
<小时/> 的更新: 我找到了一种方法,通过遵循解决方案here来正确显示重音字母。但是我必须删除
sep=;
这是重要的,因为它用分号分隔我的数据。有没有办法在顶部添加BOM和sep=;
?如果是这样,怎么样?因为看起来我只能使用一个。
str='sep=;\r\n'
而不是
str='\uFEFF sep=;\r\n'
答案 0 :(得分:2)
如果在创建file.csv时出现ASCII错误,请先尝试添加BOM。
var BOM = "\uFEFF";
return BOM + str;
然后用数据创建文件头:&#34; text / csv; charset = utf-8&#34; 而不是utf8(没有 - )
答案 1 :(得分:0)
在encodeURI的地方使用escape并在字符串前添加“sep =; \ n”并允许它转义
示例代码
var csvString = "sep=;\n" + csvRows.join("\n");
var a = document.createElement('a');
a.href = 'data:attachment/csv;charset=UTF-8,%EF%BB%BF' + escape(csvString);