关于淘宝CSV格式的研究
CSV即Comma Separate Values,这种文件格式经常用来作为不同程序之间的数据交互的格式。
经过二进制代码的分析,具体文件格式规则如下:
- 每条记录占一行
- 以逗号为分隔符,淘宝以TAB为分隔符
- 逗号前后的空格会被忽略
- 字段中包含有逗号,该字段必须用双引号括起来
- 字段中包含有换行符,该字段必须用双引号括起来
- 字段前后包含有空格,该字段必须用双引号括起来
- 字段中的双引号用两个双引号表示
- 字段中如果有双引号,该字段必须用双引号括起来
- 第一条记录,是字段名
以上是通行规则,经研究发现,淘宝CSV在文头部加有标志FF FE,这两个字节如果不存在,文件读出来全部为乱码(后注1)。
然而这一点现象并没有在有啊CSV文件中发现,拍拍CSV则暂没研究过。
其它还有几点比较特殊的地方:
- 如果某个字段没有值(为空),淘宝CSV中表示为TAB
- 淘宝CSV文字编码为Unicode_2LE编码,这一点与有啊CSV是不一样的。
后注1: 文件头部有FF FE,这个称为文件的BOM信息,不同编码的BOM信息是不一样的。
Unicode {0xFF, 0xFE};
BE-Unicode {0xFE, 0xFF};
UTF8 = {0xEF, 0xBB, 0xBF};
这些知识也是猪悟能后来才知道的,特此标注一下。具体写入文件时加入BOM信息的方法可以参考下面的文章: