I'm developing a part of an application that's responsible for exporting some data into CSV files. The application always uses UTF-8 because of its multilingual nature at all levels. But opening such CSV files (containing e.g. diacritics, cyrillic letters, Greek letters) in Excel does not achieve the expected results showing something like Г„/Г¤, Г–/Г¶. And I don't know how to force Excel understand that the open CSV file is encoded in UTF-8. I also tried specifying UTF-8 BOM EF BB BF, but Excel ignores that.

有什么解决办法吗?

附注:哪些工具可能像Excel一样?


更新

I have to say that I've confused the community with the formulation of the question. When I was asking this question, I asked for a way of opening a UTF-8 CSV file in Excel without any problems for a user, in a fluent and transparent way. However, I used a wrong formulation asking for doing it automatically. That is very confusing and it clashes with VBA macro automation. There are two answers for this questions that I appreciate the most: the very first answer by Alex https://stackoverflow.com/a/6002338/166589, and I've accepted this answer; and the second one by Mark https://stackoverflow.com/a/6488070/166589 that have appeared a little later. From the usability point of view, Excel seemed to have lack of a good user-friendly UTF-8 CSV support, so I consider both answers are correct, and I have accepted Alex's answer first because it really stated that Excel was not able to do that transparently. That is what I confused with automatically here. Mark's answer promotes a more complicated way for more advanced users to achieve the expected result. Both answers are great, but Alex's one fits my not clearly specified question a little better.


更新2

在最后一次编辑5个月后,我注意到Alex的答案不知为何消失了。我真的希望这不是一个技术问题,我希望现在不再有关于哪个答案更好的讨论。所以我认为马克的答案是最好的。


当前回答

正如我在http://thinkinginsoftware.blogspot.com/2017/12/correctly-generate-csv-that-excel-can.html:上发表的

告诉负责生成CSV的软件开发人员纠正它。作为一个快速的解决方法,你可以使用gsed在字符串的开头插入UTF-8 BOM:

gsed -i '1s/^\(\xef\xbb\xbf\)\?/\xef\xbb\xbf/' file.csv

如果UTF-4 BOM不存在,该命令将插入。因此这是一个幂等命令。现在您应该能够双击该文件并在Excel中打开它。

其他回答

一个真正令人惊叹的答案列表,但由于还缺少一个非常好的答案,我在这里提到它:打开谷歌表的csv文件,并将其保存到本地计算机作为excel文件。

与微软相比,谷歌已经成功支持UTF-8 csv文件,所以它只是在那里打开文件。导出到excel格式也可以。因此,尽管这可能不是所有人的首选解决方案,但它是非常安全的,点击次数也不像听起来那么多,特别是当您已经登录到谷歌时。

php生成的CSV文件也有同样的问题。 当分隔符在内容开头通过“sep=,\n”定义时(当然是在BOM之后),Excel会忽略BOM。

因此,在内容的开头添加一个BOM ("\xEF\xBB\xBF"),并通过fputcsv($fh, $data_array, ";")设置分号作为分隔符;很管用。

下载并安装LibreOffice Calc 在LibreOffice Calc中打开您选择的csv文件 谢天谢地,一个导入文本向导出现了…… ...选择分隔符和字符编码选项 在Calc中选择结果数据并复制粘贴到Excel中

是的,这是可能的。当写入流创建csv时,要做的第一件事是:

myStream.Write(Encoding.UTF8.GetPreamble(), 0, Encoding.UTF8.GetPreamble().Length)

只是为了帮助有兴趣在Excel上打开文件实现这个线程的用户。

我使用了下面的向导,它对我来说工作得很好,导入了一个UTF-8文件。 不是透明的,但如果您已经有了该文件,则非常有用。

Open Microsoft Excel 2007. Click on the Data menu bar option. Click on the From Text icon. Navigate to the location of the file that you want to import. Click on the filename and then click on the Import button. The Text Import Wizard - Step 1 or 3 window will now appear on the screen. Choose the file type that best describes your data - Delimited or Fixed Width. Choose 65001: Unicode (UTF-8) from the drop-down list that appears next to File origin. Click on the Next button to display the Text Import Wizard - Step 2 or 3 window. Place a checkmark next to the delimiter that was used in the file you wish to import into Microsoft Excel 2007. The Data preview window will show you how your data will appear based on the delimiter that you chose. Click on the Next button to display the Text Import Wizard - Step 3 of 3. Choose the appropriate data format for each column of data that you want to import. You also have the option to not import one or more columns of data if you want. Click on the Finish button to finish importing your data into Microsoft Excel 2007.

来源:https://www.itg.ias.edu/content/how-import-csv-file-uses-utf-8-character-encoding-0