昨天栽在一个看不见的字符上,折腾一下午。其实
CSV 第一列表头永远莫名多出来一点东西,下游 parser 直接跪。编辑器里看着干干净净,肉眼啥也看不出。最后 hexdump 一打,行首明晃晃躺着个 FE FF——是 BOM。
根因后来才理清:本地编辑器存 UTF-8 默认带 BOM,悄悄在文件头塞了 \uFEFF。我那个 parser 不认,把它当表头的一部分,于是 “id” 变成 “\uFEFFid”,join 的时候全对不上。本地跑得好好的,CI 一上就崩,因为两边环境默认编码不一样,CI 把 BOM 当真字符读进来了。
教训就一句:数据管道里编码永远显式声明,别信环境默认。读文件前先 strip,Python 用 utf-8-sig 或者手动 lstrip(‘\ufeff’) 都行。这种隐藏字符肉眼注定找不到,老老实实上工具。