
RFC 4180       Common Format and MIME Type for CSV Files    October 2005
(https://www.ietf.org/rfc/rfc4180.txt)

Text copied from the rfc4180.txt file:

2.  Definition of the CSV Format

   While there are various specifications and implementations for the
   CSV format, 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 (FIELDSEP name)*

   record = field (FIELDSEP field)*

   name = field

   field = (escaped / non-escaped)

   escaped = DQUOTE (TEXTDATA / FIELDSEP / CR / LF / 2DQUOTE)* DQUOTE

   non-escaped = TEXTDATA*

   FIELDSEP = %x2C

   CR = %x0D 

   DQUOTE =  %x22 

   LF = %x0A 

   CRLF = CR LF 

   TEXTDATA =  %x20-21 / %x23-2B / %x2D-7E
