Javascript导出CSV编码UTF-8的问题

我需要将JavaScript数组导出到CSV文件并下载。 我这样做了,但是'ı,ü,ö,»,这个字符看起来像CSV文件中的'ıÃÃÃÄÄŸÅŸ' 。 我已经尝试了很多在这个网站推荐的解决scheme,但没有为我工作。

我添加了我的代码片段,任何人都可以解决这个问题?

var csvString = 'ı,ü,ö,ğ,ş'; var a = window.document.createElement('a'); a.setAttribute('href', 'data:text/csv; charset=utf-8,' + encodeURIComponent(csvString)); a.setAttribute('download', 'example.csv'); a.click(); 

这取决于什么程序打开example.csv文件。 使用文本编辑器,编码将是UTF-8 ,字符不会变形。 但是使用ExcelCSV的默认编码是ANSI而不是UTF-8 。 因此,如果不强制Excel使用ANSI而不使用UTF-8作为编码,则字符将会变形。

CSV ( 字节顺序标记 )作为文件中的第一个字符,可以强制使用UTF-8 CSVUTF-8的默认BOM是字节序列0xEF,0xBB,0xBF 。 所以我们可以简单地把"\xEF\xBB\xBF"作为string的第一个字节来解决。 但是肯定会太简单,不是吗? ;-)这个问题是如何强制JavaScript不把这些字节作为字符。 “解决scheme”使用特殊字符(JavaScript)中提到的“通用BOM” "\uFEFF"

例:

 var csvString = 'ı,ü,ü,ğ,ş'; var universalBOM = "\uFEFF"; var a = window.document.createElement('a'); a.setAttribute('href', 'data:text/csv; charset=utf-8,' + encodeURIComponent(universalBOM+csvString)); a.setAttribute('download', 'example.csv'); window.document.body.appendChild(a); a.click();