手头积累了一些数据,想生成对比分析报表,图片比较直观但是塞不进太多细节,因此还是决定采用简单的csv(Comma-Separated Values)格式,方便其他人用excel等软件操作。
虽然csv格式的定义比较简单,但实际上csv格式有自己的详细定义,包括指定非逗号的分割符,如何转义分割符和换行符,如何转义转义符等等,有兴趣的话可以参考 RFC 4180
。这里稍微精简下说明:
- 每一行用回车换行符分隔,
CRLF
,也就是\r\n
- 每列用逗号分隔,
,
,每行的列数要一致 - 列中的数据如果有逗号,回车换行符或者双引号,此列需要放在双引号内转义
- 双引号内的双引号需要用两个双引号转义
各编程语言通常有csv的库(也有excel的库),但是如果不牵涉到复杂的情况,一般可以自己直接拼接,免去学一个库的负担。如果数据中的内容你无法掌控,还是老老实实选个流行库操作吧。
如果csv中有unicode字符,例如中文,用excel打开时会乱码,虽然采用gbk
编码也可以解决这个问题,但是更常见的是在文件起始处加入UTF-8 BOM
头部信息,即\ufeff
。
由于csv没有格式控制,excel在打开时会尝试解析数据并设置格式,在解析日期或时间时通常显示会有问题,如果需要规避,可以用="数据"
的方式强制指定为文本。
License: (CC 3.0) BY-NC-SA