CSV格式的UTF-8和Microsoft Excel

在我的应用程序中,我有一个可以导出到CSV的项目列表。

为此,我创build了一个Blob,如下所示:

var BOM = "\ufeff"; var blob = new Blob([csv], { type: 'csv;charset=utf-8' }); 

如果此列表中的数据包含特殊字符,导出的文件在MS Excel中未正确打开。 所以我在我的代码中添加了一行(在下面的代码片段中的第二行),正如我在许多Q&A论坛中发现的:

  var BOM = "\ufeff"; var csv = BOM + csv; var blob = new Blob([csv], { type: 'csv;charset=utf-8' }); 

这是有效的 – CSV在Excel中正确打开,但保存文件时,它以文本格式保存,而不是CSV格式。 这意味着我需要“另存为”文件并更改默认types,如果我想要正确保存。

这是真的吗? 我真的必须在两个选项之间进行select – 查看文件还是保存正确?

是的,这是一个耻辱,但它真的是这样的。 从Excel一个CSV是默认的ANSI编码,并没有直接的可能性保存在任何Unicode编码的CSVMicrosoft本身build议使用Notepad本来改变编码。 请参阅如何使用UTF-8编码格式将地址簿保存为CSV文件,以便可以将CSV文件导入到Windows Mail 。 另请参见如何使用Excel 2013以utf-8编码保存csv?

唯一的可能是使用VBA并使用ADODB.StreamScripting.FileSystemObject创buildCSV文件。

如何使用ADODB.Stream来创buildUnicode编码的CSV文件已被多次回答。 例如: 如何将excel导出为带有“|”的csv文件 定界和utf-8代码 。 只需更改分隔符“|” 至 ”,”。 这是基本的方法。 如果分隔符可以是数据的一部分,也许你必须扩展它以提供文本分隔符。

使用Scripting.FileSystemObject CreateTextFile方法.FileSystemObject更简单,但只允许UTF-16LE而不是UTF-8的Unicode