繁体   English   中英

Javascript 导出 CSV 编码 utf-8 问题

[英]Javascript export CSV encoding utf-8 issue

我需要将 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();

这取决于打开example.csv文件的程序。 使用文本编辑器,编码将为UTF-8 ,字符不会出现格式错误。 但是使用ExcelCSV的默认编码是ANSI而不是UTF-8 因此,如果不强制Excel不使用ANSI而是使用UTF-8作为编码,字符就会出现格式错误。

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

例子:

 var csvString = 'ı,ü,ü,ğ,ş,#Hashtag,ä,ö'; var universalBOM = "\"; 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();

另请参阅将 UTF-8 BOM 添加到 string/Blob

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM