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编码的CSV
。 Microsoft
本身build议使用Notepad
本来改变编码。 请参阅如何使用UTF-8编码格式将地址簿保存为CSV文件,以便可以将CSV文件导入到Windows Mail 。 另请参见如何使用Excel 2013以utf-8编码保存csv?
唯一的可能是使用VBA
并使用ADODB.Stream
或Scripting.FileSystemObject
创buildCSV
文件。
如何使用ADODB.Stream
来创buildUnicode编码的CSV
文件已被多次回答。 例如: 如何将excel导出为带有“|”的csv文件 定界和utf-8代码 。 只需更改分隔符“|” 至 ”,”。 这是基本的方法。 如果分隔符可以是数据的一部分,也许你必须扩展它以提供文本分隔符。
使用Scripting.FileSystemObject
CreateTextFile方法.FileSystemObject更简单,但只允许UTF-16LE而不是UTF-8的Unicode
。