首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PHP中输出Excel可以正确读取的UTF-8 CSV?

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

Stack Overflow用户
提问于 2010-12-04 02:49:11
回答 20查看 378.7K关注 0票数 204

我有一个非常简单的东西,它只输出一些CSV格式的东西,但它必须是UTF-8格式。我在TextEdit、TextMate或Dreamweaver中打开这个文件,它可以正确地显示UTF-8字符,但是如果我在Excel中打开它,它会做这种愚蠢的事情。下面是我的文档开头的内容:

代码语言:javascript
复制
header("content-type:application/csv;charset=UTF-8");
header("Content-Disposition:attachment;filename=\"CHS.csv\"");

这一切似乎都有预期的效果,除了Excel (Mac,2008)不想正确地导入它。我在Excel中没有“以UTF-8格式打开”之类的选项,所以…我有点烦了。

我似乎在任何地方都找不到任何明确的解决方案,尽管很多人都有同样的问题。我看到的最多的事情是包含BOM,但我不能准确地弄清楚如何做到这一点。正如你在上面看到的,我只是在echo这个数据,我没有写任何文件。如果我需要的话,我可以这样做,我只是不是因为在这一点上看起来不需要它。有什么帮助吗?

更新:我试着以echo pack("CCC", 0xef, 0xbb, 0xbf);的形式回显BOM,这是我刚从一个试图检测BOM的网站上拉出来的。但Excel在导入时只是将这三个字符附加到第一个单元格,并且仍然会弄乱特殊字符。

EN

回答 20

Stack Overflow用户

发布于 2010-12-14 22:24:34

我也有同样(或类似)的问题。

在我的例子中,如果我将BOM添加到输出,它将工作:

代码语言:javascript
复制
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

我认为这是一个相当丑陋的技巧,但它对我来说是有效的,至少对Excel2007Windows有效。我不确定它是否能在Mac上工作。

票数 309
EN

Stack Overflow用户

发布于 2011-09-30 01:36:12

下面是我是如何做到的(即提示浏览器下载csv文件):

代码语言:javascript
复制
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=file.csv');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
echo "\xEF\xBB\xBF"; // UTF-8 BOM
echo $csv_file_content;
exit();

当你在Mac上按空格键时,它修复了CSV预览中的UTF8编码问题。但不是在Excel Mac 2008中...不知道为什么

票数 34
EN

Stack Overflow用户

发布于 2017-12-27 02:28:53

在我的例子中,下面的代码可以让带有UTF-8字符的CSV文件在Excel中正确显示。

代码语言:javascript
复制
$out = fopen('php://output', 'w');
fprintf($out, chr(0xEF).chr(0xBB).chr(0xBF));
fputcsv($out, $some_csv_strings);

Excel标题将让0xEF 0xBB 0xBF知道正确的编码。

票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4348802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档