我有一个非常简单的东西,它只是以 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 只是在导入时将这三个字符附加到第一个单元格,并且仍然弄乱了特殊字符。
原文由 Ben Saufley 发布,翻译遵循 CC BY-SA 4.0 许可协议
引用 Microsoft 支持工程师的 话,
2017 年更新: Office 2016 之前的所有 Microsoft Excel for Mac 版本都是如此。较新的版本(来自 Office 365)现在支持 UTF-8。
为了输出 Windows 和 OS X 上的 Excel 都能成功读取的 UTF-8 内容,您需要做两件事:
仅在 OS X(而 不是 Windows)上的 Excel 中出现的下一个问题将是在查看具有逗号分隔值的 CSV 文件时,Excel 将仅呈现一行,并且所有文本与第一行中的逗号一起呈现。
避免这种情况的方法是使用制表符作为分隔值。
我 在 PHP 注释中使用了这个函数(使用制表符“\t”而不是逗号),它在 OS X 和 Windows Excel 上运行良好。
请注意,要解决以空列作为行尾的问题,我确实必须更改以下代码行:
至
正如此页面上的其他一些评论所说,其他电子表格应用程序(如 OpenOffice Calc、Apple 自己的 Numbers 和 Google Doc 的电子表格)对带有逗号的 UTF-8 文件没有任何问题。
请参阅 此问题中的表格, 了解 Excel 中的 Unicode CSV 文件适用和无效的方法
作为旁注,我可能会补充一点,如果您使用的是 Composer ,您应该看看添加
League\Csv
到您的要求。League\Csv
有 一个非常好的 API 用于构建 CSV 文件。要使用
League\Csv
与这种创建 CSV 文件的方法,请查看 此示例