【发布时间】:2015-09-01 07:22:11
【问题描述】:
我正在我的网站上导出到 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'
【问题讨论】:
-
您必须确保您的文本文件以 unicode 而非 utf8 格式保存
-
好的,我该怎么做?
-
您是否向他们提供文件作为下载或仅在浏览器中提供,然后他们复制和粘贴?如果他们复制并粘贴,您可能会通过将您的 doctype/charset 放入 unicode 来取得一些成功。如果您进行下载,请向他们提供 unicode 格式的压缩可下载文本文件。例如
"data:text/csv;charset=utf8,"不应该是 utf8 而是 unicode -
我为他们提供了一个链接按钮,它将通过
href=data:text/csv;charset=utf8,{uriencoded data here}下载文件。我现在将尝试将 utf8 更改为 unicode -
没有更改为
charset=unicode无效
标签: javascript csv non-ascii-characters