我正在導出到我的網站上的CSV功能。數據以西班牙文顯示,因此在那裏會出現許多重音字符,這個問題的一個例子是標題「Año」(年份),但在Excel中顯示爲「A?o」。使用javascript導出CSV時,重音字母顯示不正確
下面是使用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;
}
UPDATE: 我發現了一種通過以下解決方案 here正確顯示重音字母。但我不得不刪除
sep=;
這是非常重要的,因爲它用分號分隔我的數據。有沒有辦法在頂部添加BOM和
sep=;
?如果是這樣,怎麼樣?因爲看起來我只能用一個。
所以不是
str='sep=;\r\n'
現在
str='\uFEFF sep=;\r\n'
你必須確保你的文本文件被保存在unicode的,而不是在UTF8 – Tschallacka
好吧,我該怎麼辦塔T' – clintgh
你是否提供文件作爲下載或只是在瀏覽器中,他們複製和粘貼?如果他們複製並粘貼,您可以通過將doctype/charset放入unicode來獲得一些成功。如果您下載的文件是unicode格式的壓縮文件,例如''data:text/csv; charset = utf8,''不應該是utf8,而是unicode – Tschallacka