【问题标题】:Accented letters not showing properly when exporting CSV using javascript使用 javascript 导出 CSV 时重音字母无法正确显示
【发布时间】: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


【解决方案1】:

如果您在创建 file.csv 时遇到 ASCII 错误,请先尝试添加 BOM。

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

然后用以下数据创建文件头:“text/csv;charset=utf-8” 而不是 utf8(没有 - )

【讨论】:

    【解决方案2】:

    在 encodeURI 的位置使用转义并在字符串前添加“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);
    

    【讨论】:

      猜你喜欢
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 1970-01-01
      • 2014-01-04
      • 1970-01-01
      相关资源
      最近更新 更多