CSV格式的UTF-8和Microsoft Excel

时间:2017-01-25 10:22:49

标签: excel csv

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

为此,我按如下方式创建一个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。这意味着我需要"另存为"如果我想要正确保存它,请更改默认类型。

真的像这样吗?我是否真的必须在两个选项之间进行选择 - 请参阅文件正确保存?

1 个答案:

答案 0 :(得分:1)

是的,这是一种耻辱,但它真的是这样的。从Excel开始CSV默认为ANSI编码,并且没有直接可能在任何unicode编码中保存CSVMicrosoft本身建议使用Notepad更改编码。见How to save an address book to a CSV file by using the UTF-8 encoding format so that the CSV file can be imported to Windows Mail。另请参阅How can I save a csv with utf-8 encoding using Excel 2013?

只有其他可能使用VBA并使用CSVADODB.Stream创建Scripting.FileSystemObject文件。

如何使用ADODB.Stream创建unicode编码的CSV文件已经多次回答。例如:how to Export excel to csv file with "|" delimted and utf-8 code。只需更改分隔符“|”至 ”,”。这是基本方法。如果分隔符可以是数据的一部分,也许你必须扩展它以提供文本分隔符。

使用Scripting.FileSystemObject Unicode更简单,但只允许 export enum StepCategory { START = 0, POSITION_1 = 1, TRANSPORT = 2, RECEIVER = 3, END = 4, NO_STEP_MATCH = 5 } 为UTF-16LE,而不是UTF-8。