为了给运筹学的同学提供数据支持,需要导出数据文件,通常是常见的CSV逗号分隔文件,可以用Excel打开。
首先导出一个标准的csv格式文件,采用UTF-8编码,无BOM头,但是用Excel打开时,csv出现乱码。
此时,考虑是否可以手动指定Excel打开的文件的编码:
File--CSV,指定UTF8编码、 、分隔符和",代码不再乱码,但是除了字段内容换行之外都可以工作,这意味着CSV解析会失败。
无法解决,我改变主意,分析了Excel本身导出的utf8编码的csv文件。
上面明明写着With BOM,而且Ya生成的utf8文件是有BOM头的! (对于UTF8文件,不包含BOM头是业界比较标准的,微软仍然依赖BOM)
PHP生成csv时,首先输出BOM头。 导出的csv文件可以直接用Excel打开,完美解决乱码问题!
具体代码(可能需要绕过防火墙):
PHP 导出 csv
PHP输出BOM头:
echo "\xEF\xBB\xBF";
题外话:
在解决这个问题的时候,我又遇到了一个小问题。 PHP 的命令结束标志 ?> 在导入文件时会生成额外的空白字符。 请参阅:注意,在某些情况下会导致错误。
例如本文中,如果在输出BOM头之前输出一个空白字符,那么大多数软件将无法识别带有BOM头的文件。