Bol*_*rus 51 javascript csv export-to-csv
我需要将javascript数组导出到excel文件并下载它我在这段代码中执行它.data是一个javascript对象数组.
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();
Run Code Online (Sandbox Code Playgroud)
所有这些东西都可以正常工作,直到我的字符串属性具有非英语字符,如西班牙语,阿拉伯语或希伯来语.如何使用所有这些非ASCII值进行导出?
Ger*_*agy 85
您应该在文本的开头添加UTF-8 BOM,例如:
var csvContent = "data:text/csv;charset=utf-8,%EF%BB%BF";
Run Code Online (Sandbox Code Playgroud)
它适用于Excel 2013.
小智 69
您可以先添加BOM,使用此代码并尝试
var BOM = "\uFEFF";
var csvContent = BOM + csvContent;
Run Code Online (Sandbox Code Playgroud)
然后用数据创建文件头:"text/csv; charset = utf-8"
b4s*_*ien 16
Excel在检测编码时非常糟糕,特别是在OSX上的Excel.
最好的解决方案是使用默认的Excel编码对CSV进行编码:windows-1252(也称为ANSI,基本上是ISO-8859-1的子集).
我在以下网址上提供了完整的示例:https://github.com/b4stien/js-csv-encoding.
两个主要部分是stringencoding(用于编码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');
Run Code Online (Sandbox Code Playgroud)
btx*_*btx 10
只需将 BOM 字符粘在字符串前面即可。
\n没有必要使用该encodeURIComponent方法并粘合数据字符串片段。
const data = '\xc3\xb6\xc3\xa4\xc3\xbc\xc3\x96\xc3\x84\xc3\x9c';\nconst BOM = '\\uFEFF';\nconst blob = new Blob([BOM + data], { type: 'text/csv;charset=utf-8' });\n\nconst url = window.URL.createObjectURL(blob);\nconst linkElem = document.createElement('a');\nlinkElem.href = url;\nlinkElem.click();\nRun Code Online (Sandbox Code Playgroud)\n
选项1
使用iconv-litelibrary 并将您的输出编码为 ascii,然后再将其发送回用户。例子:
var iconv = require('iconv-lite');
buf = iconv.encode(str, 'win1255'); // return buffer with windows-1255 encoding
Run Code Online (Sandbox Code Playgroud)
选项 2
在文件头部写入UTF-8编码的BOM头。例子:
res.header('Content-type', 'text/csv; charset=utf-8');
res.header('Content-disposition', 'attachment; filename=excel.csv');
res.write(Buffer.from('EFBBBF', 'hex')); // BOM header
// rest of your code
Run Code Online (Sandbox Code Playgroud)
选项 3
使用 base64 url 格式,如data:text/csv;base64,77u/Zm9vLGJhcg0KYWFhLGJiYg==. 此方法也适用于客户端(IE10+、FF、Chrome、Opera、Safari)。
例如:
window.location = "data:text/csv;base64,77u/" + btoa("foo,bar\r\naaa,bbb");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73007 次 |
| 最近记录: |