Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript导出CSV编码utf-8问题_Javascript_Excel_Csv_Encoding_Utf 8 - Fatal编程技术网

Javascript导出CSV编码utf-8问题

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

我需要将javascript数组导出到CSV文件并下载它。我这样做了,但是这个字符在CSV文件中看起来像是。我在这个网站上尝试了很多推荐的解决方案,但都不适合我

我添加了我的代码片段,有人能解决这个问题吗

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忽略#?谢谢@特里斯坦·培根:对不起,不能复制。即使数据中有
#
字符,也适用于我。