使用javascript导出CSV时,重音字母无法正常显示

时间:2015-06-16 12:54:14

标签: javascript csv non-ascii-characters

我正在我的网站上导出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'

2 个答案:

答案 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);