【Format】csv

Posted by 西维蜀黍 on 2020-01-12, Last Modified on 2021-09-21

一个奇怪的 Scenario

如果你的机器上装了 Microsoft Excel 的话,.csv 文件默认是被 Excel 打开的。

需要注意的是,当你双击一个.csv 文件,Excel 打开它以后即使不做任何的修改,在关闭的时候 Excel 往往会提示是否要改成正确的文件格式,这个时候如果选择“是”,因为 Excel 认为.CSV 文件中的数字是要用科学记数法来表示的,Excel 会把 CSV 文件中所有的数字用科学计数来表示(2.54932E+5 这种形式),这样操作之后,只是在 Excel 中显示的时候会不正常,而 csv 文件由于是纯文本文件,在使用上没有影响;如果选择了“否”,那么会提示你以 xls 格式另存为 Excel 的一个副本。

所以,建议把 .csv 的默认打开方式改成任意一个文本编辑器。

, 问题

由于逗号在 CSV 文件中特殊的作用,为了不至于产生歧义,在出现逗号的地方,需要用""把这整个字段包裹起来。

举例说明

制造商 型号 说明 价值
1997 Ford E350 ac,abs,moon 3000.00
1999 Chevy Venture “Extended Edition” 4900.00
1999 Chevy Venture “Extended Edition, Very Large” 5000.00
1996 Jeep Grand Cherokee MUST SELL! air, moon roof, loaded 4799.00

上面表格内容若以 .csv格式表示就会是这样:

年,制造商,型号,说明,价值
1997,Ford,E350,"ac, abs, moon",3000.00
1999,Chevy,"Venture ""Extended Edition""","",4900.00
1999,Chevy,"Venture ""Extended Edition, Very Large""","",5000.00
1996,Jeep,Grand Cherokee,"MUST SELL! air, moon roof, loaded",4799.00

以上这个CSV的例子说明了:

  • 包含逗号、双引号、 或是换行符的字段必须放在引号内

  • 字段内部的引号必须在其前面增加一个引号来实现引号的转义

  • 分隔符逗号前后的空格 可能不会 被修剪掉,这是RFC 4180的要求

  • 元素中的换行符将被保留下来

  • 如果字段包含被嵌入的逗号,必须被包裹,比如:

1997,Ford,E350,"ac, abs, moon",3000.00
  • 每个被嵌入的双引号字符必须用两个双引号表示:
1999,Chevy,"Venture ""Extended Edition""","",4900.00