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
,字符不会变形。 但是使用Excel
, CSV
的默认编码是ANSI
而不是UTF-8
。 因此,如果不强制Excel
使用ANSI
而不使用UTF-8
作为编码,则字符将会变形。
将CSV
( 字节顺序标记 )作为文件中的第一个字符,可以强制使用UTF-8
CSV
。 UTF-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();