使用PHP导出UTF-8字符的CSV

3

我需要使用php导出一个 .csv 文件。 我使用了以下代码:

header('Content-Encoding: UTF-8');
header('Content-type: application/csv; charset=UTF-8');
header("Content-Disposition: attachment; filename=$fn");
echo "\xEF\xBB\xBF"; // UTF-8 BOM
print($csv); 

$csv 包含一些波斯语字符。当我使用 MS Excel 打开导出的文件时,出现了错误的字符。但是当我使用记事本打开文件时,字符显示正确。 我该如何解决这个问题?


您的原始内容是否为utf8格式?如果您在$csv上使用utf8_encode,是否有所帮助? - scott
以下是关于编程的内容,需要将其从英语翻译成中文。请只返回翻译后的文本:原始内容为utf8格式,但我在PHP文件中没有使用任何标记来定义,比如[<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />] - sajad nabavi
你可能想要测试一下。我过去遇到过这样的问题。在所有点上,它应该是utf8格式(即从中加载数据的数据库)。此外,阅读http://drupal.org/node/172996似乎csv文件存在固有问题;有人建议将其保存为.txt文件,然后在Excel中将.txt文件打开为csv文件,因为.txt支持utf8而csv仅支持ascii。 - scott
Excel在导入“奇怪”的编码方面非常糟糕。尝试使用它的文件>导入功能,而不是常规的双击操作。 - deceze
尝试生成utf16 - Janus Troelsen
1
你可以尝试使用xlsx代替(http://phpexcel.codeplex.com/)。 - Janus Troelsen
1个回答

2
这是我做到的方法。
header('Content-Encoding: UTF-8');
header('Content-type: text/csv; charset=UTF-8');
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");
header('Content-Transfer-Encoding: binary');
echo "\xEF\xBB\xBF";

之前我得到的是垃圾字符,现在正确的数据已经导出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接