lizzie / specs

MIT License
1 stars 0 forks source link

CSV Specification #5

Open lizzie opened 9 years ago

lizzie commented 9 years ago

http://www.ietf.org/rfc/rfc4180.txt

1. 简介

逗号分割格式文件(CSV),常常用于在不同的电子表格软件之间进行数据转换。虽然这种格式非常常见,但是在这之前都没有很好的规范化说明过。另外,csv 格式文件的 MIME 类型也一直没有规范过,这份文档中,指定了 "text/csv" 为 CSV 文件的 MIME 类型。

2. CSV 格式的定义

  1. 每条记录占一行,且以 CRLF 作为换行符

    aaa,bbb,ccc CRLF
    zzz,yyy,xxx CRLF
  2. 最后一条记录的换行符 CRLF 可省略

    aaa,bbb,ccc CRLF
    zzz,yyy,xxx
  3. 首行记录可以是标题,每个标题字段对应下面的字段值,且个数及顺序一致。是否包含标题行,可在 MIME 类型中的 header 参数中表明

    field_name,field_name,field_name CRLF
    aaa,bbb,ccc CRLF
    zzz,yyy,xxx CRLF
  4. 每行(包含标题行),如果有多个字段,各个字段以 , 分割。每行包含的字段数需一致。各个字段中的空格是有效的值,不能被忽略。每条记录的最后一个字段不需要添加 ,

    aaa,bbb,ccc
  5. 每个字段可以加双引号包裹(但有些软件,如 Microsoft Excel不能识别此双引号)。如果没使用双引号包裹的字段,那么,字段内部不能出现双引号。

    "aaa","bbb","ccc" CRLF
    zzz,yyy,xxx
  6. 如果字段中包含换行符 CRLF、双引号、逗号,那么该字段应需要双引号包裹。

    "aaa","b CRLF
    bb","ccc" CRLF
    zzz,yyy,xxx
  7. 如果被双引号包裹的字段中有双引号字符的话,那么需求将字段内的双引号字符转义,即在双引号字符前再加个双引号字符。

    "aaa","b""bb","ccc"

范式:

file = [header CRLF] record *(CRLF record) [CRLF]
header = name *(COMMA name)
record = field *(COMMA field)
name = field
field = (escaped / non-escaped)
escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE
non-escaped = *TEXTDATA
COMMA = %x2C
CR = %x0D ;as per section 6.1 of RFC 2234 [2]
DQUOTE =  %x22 ;as per section 6.1 of RFC 2234 [2]
LF = %x0A ;as per section 6.1 of RFC 2234 [2]
CRLF = CR LF ;as per section 6.1 of RFC 2234 [2]
TEXTDATA =  %x20-21 / %x23-2B / %x2D-7E

MIME 类型说明 text/csv

hotoo commented 9 years ago

翻译下?

hotoo commented 9 years ago

赞,代码的前面空白可以去掉,例如:

  1. list item

    indent equal code start.