很难想象有这么多答案,但是没有一个回答了这个问题:
“当我提出这个问题时,我要求一种在Excel中打开UTF-8 CSV文件且用户不会遇到任何问题的方法......”
被标记为最佳答案并获得200多个赞的答案对我来说没有用,因为我不想给我的用户一个手册来配置Excel。除此之外:这个手册只适用于一个Excel版本,而其他Excel版本拥有不同的菜单和配置对话框。你需要为每个Excel版本编写一个手册。
所以问题就是如何通过简单的双击使Excel显示UTF8数据?
至少在Excel 2007中,如果使用CSV文件,这是不可能的,因为UTF8 BOM会被忽略,你将只能看到垃圾内容。这已经是Lyubomyr Shaydariv的问题的一部分:
“我还尝试了指定UTF-8 BOM EF BB BF,但Excel会忽略它。”
我有同样的经验:将俄语或希腊语数据写入UTF8 CSV文件与BOM会导致Excel中出现垃圾内容:
UTF8 CSV文件的内容:
Colum1
Val1
Авиабилет
Excel 2007 中的结果:
一个解决方案是不要使用 CSV。这种格式被微软实现得非常愚蠢,它取决于控制面板中的区域设置,用作分隔符的字符是逗号还是分号。因此,同一份 CSV 文件在一台计算机上可能会正确打开,在另一台计算机上却无法正常打开。 "CSV" 的意思是 "逗号分隔值",但例如在德语 Windows 上,默认情况下必须使用分号作为分隔符,逗号不起作用。(在这里应该称为 SSV = 分号分隔值)CSV 文件不能在不同语言版本的 Windows 之间交换。这是 UTF-8 问题的另一个问题。
Excel 存在数十年了。 微软多年来竟然无法实现如此基本的事情,即 CSV 导入,真是可惜。
然而,如果您将相同的值放入 HTML 文件中,并将该文件保存为 UTF8 带 BOM 的文件扩展名为XLS,您将获得正确的结果。
UTF8 XLS 文件的内容:
<table>
<tr><td>Colum1</td><td>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
</table>
Excel 2007中的结果:
你甚至可以在HTML中使用颜色,Excel会正确显示。
<style>
.Head
.Red
</style>
<table border=1>
<tr><td class=Head>Colum1</td><td class=Head>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td class=Red>Авиабилет</td><td class=Red>Tλληνικ</td></tr>
</table>
Excel 2007 的结果:
在这种情况下,只有表格本身具有黑色边框和线条。如果您想让所有单元格都显示网格线,在HTML中也是可能的。
<html xmlns:x="urn:schemas-microsoft-com:office:excel">
<head>
<meta http-equiv="content-type" content="text/plain; charset=UTF-8"/>
<xml>
<x:ExcelWorkbook>
<x:ExcelWorksheets>
<x:ExcelWorksheet>
<x:Name>MySuperSheet</x:Name>
<x:WorksheetOptions>
<x:DisplayGridlines/>
</x:WorksheetOptions>
</x:ExcelWorksheet>
</x:ExcelWorksheets>
</x:ExcelWorkbook>
</xml>
</head>
<body>
<table>
<tr><td>Colum1</td><td>Column2</td></tr>
<tr><td>Val1</td><td>Val2</td></tr>
<tr><td>Авиабилет</td><td>Tλληνικ</td></tr>
</table>
</body>
</html>
这段代码甚至允许指定工作表的名称(这里是"MySuperSheet")
在Excel 2007中的结果:
\t
作为分隔符。适用于英文和非英文Excel设定。可以直接按Ctrl-S
进行保存,无需选择文件格式等操作。可以保留Unicode字符。 - Sebastian