================================================================
Offlineable (subway-tunnelable) excerpt from https://tools.ietf.org/html/rfc4180
================================================================
Definition of the CSV Format

While there are various specifications and implementations for the
CSV format (for ex. [4], [5], [6] and [7]), there is no formal
specification in existence, which allows for a wide variety of
interpretations of CSV files.  This section documents the format that
seems to be followed by most implementations:

1.  Each record is located on a separate line, delimited by a line
    break (CRLF).  For example:

    aaa,bbb,ccc CRLF
    zzz,yyy,xxx CRLF

2.  The last record in the file may or may not have an ending line
    break.  For example:

    aaa,bbb,ccc CRLF
    zzz,yyy,xxx

3.  There maybe an optional header line appearing as the first line
    of the file with the same format as normal record lines.  This
    header will contain names corresponding to the fields in the file
    and should contain the same number of fields as the records in
    the rest of the file (the presence or absence of the header line
    should be indicated via the optional "header" parameter of this
    MIME type).  For example:

    field_name,field_name,field_name CRLF
    aaa,bbb,ccc CRLF
    zzz,yyy,xxx CRLF

4.  Within the header and each record, there may be one or more
    fields, separated by commas.  Each line should contain the same
    number of fields throughout the file.  Spaces are considered part
    of a field and should not be ignored.  The last field in the
    record must not be followed by a comma.  For example:

    aaa,bbb,ccc

5.  Each field may or may not be enclosed in double quotes (however
    some programs, such as Microsoft Excel, do not use double quotes
    at all).  If fields are not enclosed with double quotes, then
    double quotes may not appear inside the fields.  For example:

    "aaa","bbb","ccc" CRLF
    zzz,yyy,xxx

6.  Fields containing line breaks (CRLF), double quotes, and commas
    should be enclosed in double-quotes.  For example:

    "aaa","b CRLF
    bb","ccc" CRLF
    zzz,yyy,xxx

7.  If double-quotes are used to enclose fields, then a double-quote
    appearing inside a field must be escaped by preceding it with
    another double quote.  For example:

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

The ABNF grammar [2] appears as follows:

  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
