客户发来一个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打开没事,要入库、要对接,一律按纯文本处理,先看源码再动手。