Excel是否可以自动识别UTF-8格式的CSV文件?

620
我正在开发一个应用程序的一部分,负责将一些数据导出到CSV文件中。该应用程序始终使用UTF-8编码,因为它在所有层面上都具有多语言特性。但是,在Excel中打开这些包含重音符、西里尔字母和希腊字母等内容的CSV文件时,并不能达到预期的结果,显示出类似于“Г„/Г¤, Г–/Г¶”这样的内容。我不知道如何强制Excel理解打开的CSV文件是以UTF-8编码的。我还尝试了指定UTF-8 BOM“EF BB BF”,但Excel忽略了它。
是否有任何解决方法?
附注:哪些工具可能会像Excel一样表现?

更新

我必须说,我在提问的方式上让社区感到困惑了。当我提出这个问题时,我是想要一种在Excel中以流畅和透明的方式打开UTF-8格式的CSV文件,对用户没有任何问题的方法。然而,我使用了错误的表述,要求自动完成这个操作。这非常令人困惑,并且与VBA宏自动化相冲突。对于这个问题,有两个答案我最为赞赏:Alex给出的第一个答案,我已经接受了这个答案;以及稍后出现的Mark的第二个答案。从可用性的角度来看,Excel似乎缺乏友好的UTF-8 CSV支持,所以我认为两个答案都是正确的,我之所以首先接受了Alex的答案,是因为他确实指出了Excel无法透明地完成这个任务。这就是我在这里与自动混淆的地方。Mark的答案提供了一种更复杂的方法,适用于更高级的用户来实现预期的结果。两个答案都很棒,但Alex的答案稍微更符合我没有明确说明的问题。


更新2

距离上次编辑已经过去了五个月,我注意到Alex的回答不知何故消失了。我真的希望这不是技术问题,并且希望现在不再有关于哪个答案更好的讨论。因此,我接受Mark的答案作为最佳答案。


1
你能使用制表符分隔的文件吗?如果可以,你可能会更加幸运。 - Tim Perry
11
Office 2010+:最佳工作方式是使用带BOM的UTF-16LE编码,以\t作为分隔符。适用于英文和非英文Excel设定。可以直接按Ctrl-S进行保存,无需选择文件格式等操作。可以保留Unicode字符。 - Sebastian
3
Alex的回答被版主删除了。没有给出任何解释,但如果您有足够的声望,仍然可以看到它。 - Mark Ransom
1
@osexpert,你因为你的Excel 2010经验与我六年前的经验不同就给我点了个踩?好吧。我声称那时它并没有以直接的方式适用于Excel。 - Lyubomyr Shaydariv
2
这不是很疯狂吗?在这个帖子发布12年后的今天,我竟然遇到了完全相同的问题,与Excel有关。我将数据翻译成西班牙语,并将其导出为CSV文件,然后尝试在Excel中打开它。重音字符看起来像垃圾一样。微软真的会听取使用他们产品的任何人的建议吗? - hamayoun
显示剩余11条评论
33个回答

0

分享一个全面的函数,可能会让你在处理CSV文件时更加轻松...请注意与此主题相关的最后一个函数参数

function array2csv($data, $file = '', $download = true, $mode = 'w+', $delimiter = ',', $enclosure = '"', $escape_char = "\\", $addUnicodeBom = false)
{
    $return = false;

    if ($file == '') {
        $f = fopen('php://memory', 'r+');
    } else {
        $f = fopen($file, $mode);
    }

    if ($addUnicodeBom) {
        $utf8_with_bom = chr(239) . chr(187) . chr(191);
        fwrite($f, $utf8_with_bom);
    }


    foreach ($data as $line => $item) {

        fputcsv($f, $item, $delimiter, $enclosure, $escape_char);
    }

    rewind($f);

    if ($download == true) {
        $return = stream_get_contents($f);
    } else {
        $return = true;
    }

    return $return;
}

0
我做出的重大改变是:不再向用户提供 .csv 文件,而是提供 .xlsx 文件 :)
由于我是通过程序生成 CSV 文件的,并且只有人类才会操作这些文件,所以没有理由继续使用简单的 .csv 格式(更适合解析)。请注意,.xlsx 文件得到了广泛支持(不仅仅是在 Excel 中)。
我并不需要改变所有的逻辑,只需将之前的 CSV 生成脚本与一个 Excel 库结合起来,用几行代码将 CSV 转换为 XLSX。无论使用哪种语言,您都应该能够做到这一点 :)
理想情况下,我更希望不使用微软的东西,但有时候你只能顺应“标准”。

-1

首先将Excel电子表格保存为Unicode文本。使用Internet Explorer打开TXT文件,然后点击“另存为”TXT编码 - 选择适当的编码,例如Win Cyrillic 1251。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接