Javascript 导出 CSV 编码 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(csvString));
a.setAttribute('download', 'example.csv');
a.click();

最佳答案

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

Excel 可以强制使用 UTF-8CSV 放置一个 BOM ( Byte Order Mark )作为文件中的第一个字符。 UTF-8 的默认 BOM 是字节序列 0xEF,0xBB,0xBF。因此,人们可能认为简单地将 "\xEF\xBB\xBF" 作为字符串的第一个字节就是解决方案。但那肯定太简单了,不是吗? ;-) 问题在于如何强制 JavaScript 不将这些字节作为字符。 “解决方案”是使用“通用 BOM”“\uFEFF”,如 Special Characters (JavaScript) 中所述.

例子:

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.click();

另见 Adding UTF-8 BOM to string/Blob .

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

关于Javascript 导出 CSV 编码 utf-8 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42462764/

相关文章:

php - 基于第一个下拉 PHP JS 显示第二个下拉

excel - IsNumeric 函数对于空单元格返回 true

c# - 通过 C# 从 Excel 文件导入通用格式的单元格

node.js - 如何将spark rdd保存到csv文件

python - Pandas read_csv : Ignore second header line

javascript - 为什么 Node crypto 会为同一个字符串返回不同的值?

javascript - Ajax jQuery同时多次调用 - 长时间等待应答且无法取消

javascript - Chrome 开发者工具,在脚本标签内使用检查函数

c# - 当我导入 Excel 时,C# 在数据库中添加了一个额外的行

javascript - CSV 导出的正确数据格式