客户发来一个csv让导入系统,我双击打开一看是Excel表格,直接改了几个数字保存,结果上传报解析失败,打开一看全乱了。
CSV本质就是逗号分隔的文本
csv全称逗号分隔值,后缀虽是csv,里面没有样式、没有公式、没有合并单元格,就是一行一条记录,字段之间用逗号隔开。用记事本打开看一眼,马上明白它跟真正的表格文件不是一回事。
姓名,电话,城市
张三,13800000000,杭州
李四,,上海李四那行电话空着,中间就是两个逗号连着,意思是有个空字段。看懂这个,解析失败的原因能找到一半。
为什么Excel打开看着好好的,程序却读错
- 编码问题:Excel存的csv默认带BOM或用GBK,Linux程序按UTF-8读,中文全变问号
- 分隔符问题:德语区Excel用分号分隔,逗号版本程序直接整行吞掉
- 引号问题:字段里本身有逗号或换行,必须用英文双引号包起来,否则错位
最稳的验证办法:别只看Excel里顺不顺,用记事本或VS Code看原始文本,确认分隔符和引号没问题再导入。
生成CSV给别人用的三个规矩
日期别用Excel自动格式化的斜杠串,统一写成2024-01-05这种,省得对方解析成美国月日。超长数字比如身份证,得在前面加制表符或者引号,否则Excel打开尾数变零。第一行最好写英文列表头,中文列名在某些老系统里直接乱码。
下发模板:UTF-8编码,第一行英文列名,日期统一横杠格式一句话取舍:临时看看用Excel打开没事,要入库、要对接,一律按纯文本处理,先看源码再动手。