导出 UTF-8 的 CSV 给财务,Excel 打开是乱码;改成 GBK 后常用字正常,客户名里的「堃」「珺」全变成问号,一共 37 条记录受影响。日志里能对上时间点,这种反而好排。
GBK 字符集覆盖不全,生僻字和部分繁体字没有对应码位,iconv 用默认替换策略时直接变成问号且不报错。UTF-8 加 BOM 才是 Excel 能直接识别的组合。这一点先确认清楚,后面就不用反复试。
$fp = fopen('export.csv', 'w');
fwrite($fp, chr(0xEF) . chr(0xBB) . chr(0xBF));
fwrite($fp, $row);
fclose($fp);
「CSV GBK 编码」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。偶发问题先统计频率,一小时几次和一天一次,查法完全不同。
改完顺手把文档补一句,省得下次自己重新推一遍。监控和日志的时间要对上,时区不一致会多绕很大一圈。
临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
处理上按这个顺序:优先输出 UTF-8 并在文件头写 BOM;确实要 GBK 时先做编码校验 转换失败的行单独记录;导出后抽 10 行含生僻字的记录在 Excel 里核对。
结果对不对很好判断,Excel 直接双击打开不乱码,含生僻字的 37 条记录字都完整。
