一个特殊的字符被附加在js中的csv导出之前
我正在做一个CSV导出使用jQuery。
我的价值观中有特殊的字符。 另外我需要使用分号作为分号。
我的代码是:
var array= []; array.push("Item;Name;Value"); array.push("1;Test,1;Test § 17"); array.push("2;Test2;Test § 18"); var csvAudit = []; for (var i = 0; i < array.length; i++) { csvAudit.push(array[i]); } var csvExport = csvAudit.join('\n'); var csvFileName = "test.csv"; var contentType = 'text/csv;charset=utf-16'; csvExport = "\ufeff" + 'sep=;\r\n' + csvExport; var csvFile = new Blob([csvExport], { type: contentType }); var a = document.createElement('a'); a.download = csvFileName; a.href = URL.createObjectURL(csvFile); a.textContent = 'Download CSV'; a.dataset.downloadurl = [contentType, a.download, a.href].join(':'); a.click();
当我使用Chrome浏览器下载CSV时,在我的Excel文件中,我看到:Test 17而不是Test 17
如果我删除了'sep =; \ r \ n',那么特殊字符会被转义,但是分隔符被用作逗号,并以错误的方式显示数据,即Test,1显示在单独的单元格中,而不是一个。
有没有可能的解决scheme来解决这个问题?
最后,我能够通过在双引号中引用数组中的值来解决问题,并删除了分号分隔符,并使用了逗号分隔符。
正确的代码是: –
var array= []; array.push(""Item","Name","Value""); array.push(""1","Test,1","Test § 17""); array.push(""2","Test2,"Test § 18""); var csvAudit = []; for (var i = 0; i < array.length; i++) { csvAudit.push(array[i]); } var csvExport = csvAudit.join('\n'); var csvFileName = "test.csv"; var contentType = 'text/csv'; csvExport = "\ufeff" + csvExport; var csvFile = new Blob([csvExport], { type: contentType }); var a = document.createElement('a'); a.download = csvFileName; a.href = URL.createObjectURL(csvFile); a.textContent = 'Download CSV'; a.dataset.downloadurl = [contentType, a.download, a.href].join(':'); a.click();
特殊字符通过追加“\ ufeff”