提问者:小点点

Javascript到csv导出编码问题


我需要将javascript数组导出到excel文件并下载它,我正在此代码中执行此操作。数据是一个脚本对象数组。

var csvContent = "data:text/csv;charset=utf-8,";
data.forEach(function(dataMember, index)
{
    dataString = dataMember.join(",");
    csvContent += index < data.length ? dataString+ "\n" : dataString;
}); 

var encodedUri = encodeURI(csvContent);
var link = document.createElement("a");
link.setAttribute("href", encodedUri);
link.setAttribute("download", "upload_data" + (new Date()).getTime() + ".csv");
link.click();

所有这些都很好,直到我有了非英语字符的字符串属性,比如西班牙语、阿拉伯语或希伯来语。如何使用所有这些非ASCII值进行导出?


共3个答案

匿名用户

您应该在文本开头添加UTF-8 BOM,如下所示:

var csvContent = "data:text/csv;charset=utf-8,%EF%BB%BF" + encodeURI(csvContent);

它对我来说适用于Excel 2013。

演示小提琴

匿名用户

您可以首先添加BOM,使用此代码并尝试

var BOM = "\uFEFF"; 
var csvContent = BOM + csvContent;

然后用数据“text/csv;charset=utf-8”将文件头装箱

匿名用户

Excel真的不擅长检测编码,尤其是OSX上的Excel。

最好的解决方案是用默认的Excel编码对CSV进行编码:Windows-1252(也称为ANSI,它基本上是ISO-8859-1的子集)。

我在以下位置给出了一个完整的示例:https://github.com/b4stien/js-csv-encoding.

两个主要部分是字符串编码(在windows-1252中编码CSV的内容)和FileSaver.js(下载生成的Blob)。

它看起来像:

var csvContent = 'éà; ça; 12\nà@€; çï; 13',
    textEncoder = new TextEncoder('windows-1252');


var csvContentEncoded = textEncoder.encode([csvContent]);
var blob = new Blob([csvContentEncoded], {type: 'text/csv;charset=windows-1252;'});
saveAs(blob, 'some-data.csv');