给运营同学提供数据支持,需求是导出数据文件,通常就是Excel能打开的、通用的CSV逗号分隔符文件。

首先导出 无BOM头UTF-8编码的标准csv格式文件,但用Excel打开此csv乱码。
此时考虑,能否手动指定Excel打开文件的编码:
文件-导入-CSV,指定UTF8编码、 ,分隔符 及 " qualifier,不乱码了,但出现 字段内容的换行符以外起作用,也就是CSV的qualifier解析失效。

没能解决,遂换个思路,分析Excel本身导出的utf8编码的csv文件
csv-utf8-bom.png
赫然写着With BOM,丫生成的utf8文件带BOM头!(业界对于UTF8文件,不带BOM头的做法更为标准,微软仍在依赖BOM)
PHP生成csv时,先输出BOM头,导出的csv文件,用Excel直接打开,完美解决乱码问题!

具体代码(Stackoverflow,maybe需翻墙):
PHP导出csv
PHP输出BOM头:

echo "\xEF\xBB\xBF";


题外话:
解决这个问题时,遇到另一个小问题,PHP的指令结束标志 ?>,在include及require等文件引入时,产生额外的空白符见:Note,对一些场景导致bug。
比如此文,在输出BOM头前 输出了空白字符,将导致多数软件无法正常识别带BOM头的文件。

标签: none

添加新评论