2015-06-16 83 views
0

我正在導出到我的網站上的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'

+0

你必須確保你的文本文件被保存在unicode的,而不是在UTF8 – Tschallacka

+0

好吧,我該怎麼辦塔T' – clintgh

+0

你是否提供文件作爲下載或只是在瀏覽器中,他們複製和粘貼?如果他們複製並粘貼,您可以通過將doctype/charset放入unicode來獲得一些成功。如果您下載的文件是unicode格式的壓縮文件,例如''data:text/csv; charset = utf8,''不應該是utf8,而是unicode – Tschallacka

回答

1

如果你在創作FILE.CSV的ASCII錯誤,請先嚐試添加BOM。

var BOM = "\uFEFF"; 
return BOM + str; 

,然後箱子文件頭的數據: 「文本/ CSV;字符集= UTF8」 而不是UTF8(無 - )的地方是encodeURI的

0

使用逃逸,並添加「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); 
相關問題