Javascript导出CSV编码utf-8问题
我需要将javascript数组导出到CSV文件并下载它。我这样做了,但是这个字符在CSV文件中看起来像是。我在这个网站上尝试了很多推荐的解决方案,但都不适合我 我添加了我的代码片段,有人能解决这个问题吗Javascript导出CSV编码utf-8问题,javascript,excel,csv,encoding,utf-8,Javascript,Excel,Csv,Encoding,Utf 8,我需要将javascript数组导出到CSV文件并下载它。我这样做了,但是这个字符在CSV文件中看起来像是。我在这个网站上尝试了很多推荐的解决方案,但都不适合我 我添加了我的代码片段,有人能解决这个问题吗 var csvString='ı,ü,ö,ğ,ş'; var a=window.document.createElement('a'); a、 setAttribute('href','data:text/csv;charset=utf-8',+encodeURIComponent(csvS
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、 单击()代码>这取决于什么程序正在打开example.csv
文件。使用文本编辑器,编码将为UTF-8
,且字符不会出现格式错误。但是使用Excel
时CSV
的默认编码是ANSI
,而不是UTF-8
。因此,如果不强制使用Excel
而不是ANSI
而是UTF-8
作为编码,字符的格式将不正确
Excel
可以使用UTF-8
强制CSV
,并将BOM
()作为文件中的第一个字符。UTF-8
的默认BOM
是字节序列0xEF、0xBB、0xBF
。因此,我们可以简单地将“\xEF\xBB\xBF”
作为字符串的第一个字节,这就是解决方案。但这肯定太简单了,不是吗?;-)问题在于如何强制JavaScript不将这些字节作为字符。“解决方案”使用“通用BOM”“\uFEFF”
,如中所述
例如:
var csvString='ı,ü,ü,ğ,ş,ţHashtag,ä,ö';
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、 单击()
您可能知道此解决方案在Internet Explorer
中不起作用,因为此浏览器不支持以这种方式使用数据
-URI。但至少你应该使用Firefox
让它工作起来<对于未附加到DOM的元素,code>Firefox
将不接受单击
事件。因此,您需要将元素附加到DOM中,而不仅仅是创建它。见我答案中的例子。但也请阅读我的结论。使用CSV
这种方式不是解决方案,而是许多问题的一部分。我使用WPS Office电子表格打开CSV文件,但该程序仍然无法正确显示字符。我尝试用MicrosoftOfficeExcel打开CSV文件,并且工作正常。所以我明白了我的问题。感谢您的帮助。这对于让Excel以UTF-8编码打开文件非常有效,但当我点击save(Ctrl+S)时,它会将其保存为TSV文本文件,而不是CSV UTF-8文件。你遇到过这个问题吗?@Dylan:是的,但这是另一个问题,Excel应用程序中的一个Microsoft错误是无法保存CSV UTF-8编码。另请参见我答案中的最后一句。@AxelRichter-我在自己的项目中使用了您的解决方案,但我正在导出的数据是Instagram标题,其中包括hashtags(#)-您提供的UTF-8 BOM解决方案现在在遇到第一个#字符时会切断字符串-有没有建议让BOM忽略#?谢谢@特里斯坦·培根:对不起,不能复制。即使数据中有#
字符,也适用于我。