我有一个非常简单的东西,它只是以 CSV 格式输出一些东西,但它必须是 UTF-8。我在 TextEdit 或 TextMate 或 Dreamweaver 中打开这个文件,它会正确显示 UTF-8 字符,但如果我在 Excel 中打开它,它会做这种愚蠢的 íÄ 事情。这是我在文档开头的内容:
header("content-type:application/csv;charset=UTF-8");
header("Content-Disposition:attachment;filename=\"CHS.csv\"");
这一切似乎都有预期的效果,除了 Excel(Mac,2008)不想正确导入它。 Excel 中没有让我“以 UTF-8 格式打开”或其他任何选项的选项,所以……我有点恼火了。
我似乎无法在任何地方找到任何明确的解决方案,尽管很多人都有同样的问题。我看到最多的是包含 BOM,但我无法完全弄清楚如何做到这一点。正如您在上面看到的,我只是在 echo
输入这些数据,我没有写入任何文件。如果需要,我可以这样做,我只是不是因为在这一点上似乎不需要它。有什么帮助吗?
更新:我尝试将 BOM 回显为 echo pack("CCC", 0xef, 0xbb, 0xbf);
我刚刚从试图检测 BOM 的站点中提取。但是 Excel 在导入时只是将这三个字符附加到第一个单元格,并且仍然会弄乱特殊字符。
最佳答案
我有同样(或类似)的问题。
在我的例子中,如果我在输出中添加一个 BOM,它会起作用:
header('Content-Encoding: UTF-8');
header('Content-type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment; filename=Customers_Export.csv');
echo "\xEF\xBB\xBF"; // UTF-8 BOM
我相信这是一个非常丑陋的 hack,但它对我有用,至少对 Excel 2007 Windows 来说是这样。不确定它是否可以在 Mac 上运行。
关于php - 如何在 PHP 中输出 Excel 可以正确读取的 UTF-8 CSV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4348802/