PHP CSV编码不是utf-8



我正在用PHP生成一个CSV文件并将其保存在硬盘上(我不想下载)。数据库字符集是utf8_general_ci,其中有一些字符,如度符号(°),它们在PHPmyadmin中完美地显示出来。这些字符需要保存在CSV文件中。我所做的一切都是UTF-8,但文件保存时使用的编码是ISO-8859-1。如果我开始使用utf8_encode函数,当我在excel或任何其他文本编辑器中将其转换回UTF-8时,会显示其他字符(Â)。我不知道出了什么问题,我花了几个小时来追踪,但没有成功。

我尝试过SET NAMES utf8只是为了确定它是UTF-8,但这只会导致更多奇怪的字符,并且没有UTF-8编码。使用MySQLi的set_charset也可以做到这一点。在标题为Content-type:text/html;charset=UTF-8的情况下,CSV仍然没有utf-8作为默认编码,也没有任何这些组合。

部分代码:

header("Content-type:text/html;charset=UTF-8");
$rMysqli = new mysqli("localhost", "user", "pass", "database");
$rCSV = fopen("test_".time().".csv", 'w');
$aCSVdata = array($var1, $var2, $var3);
fputcsv($rCSV, $aCSVdata, ",", """);
fclose($rCSV);

这几乎就是正在发生的一切。只是普通的CSV数据,只有特殊字符,如°Ø

。。。长话短说。。。

在编码方面,Microsoft Office是最差的。众所周知,它非常糟糕。

(也就是说,除了Excel,一切都很好。)

最新更新