Javascript导出CSV编码utf-8问题

Can*_*mir 9 javascript csv excel encoding utf-8

我需要将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.click();
Run Code Online (Sandbox Code Playgroud)

Axe*_*ter 33

这取决于打开example.csv文件的程序.使用文本编辑器,编码将是UTF-8,并且字符不会格式错误.但是使用Excel默认编码CSVANSI和不是UTF-8.因此,不强制Excel使用不是ANSI,但UTF-8作为该编码,字符会畸形.

Excel可以使用强制UTF-8CSV具有把一个BOM(字节顺序标记)作为第一个字符的文件中.默认BOMUTF-8是字节序列0xEF,0xBB,0xBF.因此,人们可以认为简单地将"\xEF\xBB\xBF"字符串作为第一个字节放在解决方案中.但这肯定太简单了,不是吗?;-)这个问题是如何强制JavaScript不将这些字节作为字符."解决方案"使用特殊字符(JavaScript)中"\uFEFF"提到的"通用BOM" .

例:

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();
Run Code Online (Sandbox Code Playgroud)

另请参阅将UTF-8 BOM添加到字符串/ Blob.

使用它,编码将是正确的.但是,只有当逗号是Windows区域设置中的默认列表分隔符时,这才能正常工作.如果不是,例如,如果分区是Windows区域设置中的默认列表分隔符,则所有内容都将位于第一列中,而不用逗号分隔.然后你还必须在分号中使用分号作为分隔符CSV.但这是另一个问题,导致结论完全不使用CSV,而是使用可以直接创建Excel文件(*.xls*.xlsx)的库.

  • @Dylan:是的,但这是另一个问题,Excel应用程序中的Microsoft故障是它无法保存CSV UTF-8编码.另见我的答案中的最后一句话. (2认同)