如何在 PHP 中输​​出 Excel 可以正确读取的 UTF-8 CSV?

2024-01-20

我有一个非常简单的东西,只是以 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-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 上运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 PHP 中输​​出 Excel 可以正确读取的 UTF-8 CSV? 的相关文章