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

标签 php csv utf-8 byte-order-mark

我有一个非常简单的东西,它只是以 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/

相关文章:

java - 查看一组字节是否在 Java 中编码为 UTF-8 有什么好的启发式方法?

javascript - JSON unicode字符转换

php - 具有固定标题的可滚动表中的格式问题

php - 阵列问题

python - 获取类似 csv 的解析和行长度字节数?

c# - 将动态对象列表读入 CSV

PHP/MySQL UPDATE SET WHERE,两个表的查询

php - 使用php和mysql创建的文件夹在哪里?

linux - 如何创建脚本以将 sed 命令添加到文件中(bash 脚本)

utf-8 - 向 UITextView 添加换行符