我正在用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,一切都很好。)