2. CSVフォーマットの定義 (Definition of the CSV Format)
CSVフォーマットにはさまざまな仕様と実装が存在しますが (例: [4], [5], [6], [7])、正式な仕様は存在せず、CSVファイルの解釈は多様化しています。本セクションでは、ほとんどの実装で従われていると思われるフォーマットを文書化します:
-
各レコード (Record) は改行 (CRLF) で区切られた別々の行に配置されます。例えば:
aaa,bbb,ccc CRLF
zzz,yyy,xxx CRLF -
ファイルの最後のレコードは、末尾に改行がある場合とない場合があります。例えば:
aaa,bbb,ccc CRLF
zzz,yyy,xxx -
ファイルの最初の行として、通常のレコード行と同じフォーマットでオプションのヘッダー行 (Header Line) が現れることがあります。このヘッダーは、ファイル内のフィールドに対応する名前を含み、ファイルの残りのレコードと同じ数のフィールドを含むべきです (shouldである) (ヘッダー行の有無は、このMIMEタイプのオプションパラメータ "header" で示されるべきです)。例えば:
field_name,field_name,field_name CRLF
aaa,bbb,ccc CRLF
zzz,yyy,xxx CRLF -
ヘッダーおよび各レコード内には、カンマで区切られた1つ以上のフィールド (Field) があります。各行は、ファイル全体を通して同じ数のフィールドを含むべきです (shouldである)。スペースはフィールドの一部と見なされ、無視すべきではありません (should notである)。レコードの最後のフィールドの後にカンマを付けてはなりません (must notである)。例えば:
aaa,bbb,ccc -
各フィールドは二重引用符で囲まれる場合と囲まれない場合があります (mayである) (ただし、Microsoft Excelなどの一部のプログラムは二重引用符をまったく使用しません)。フィールドが二重引用符で囲まれていない場合、フィールド内に二重引用符を含めてはなりません (may notである)。例えば:
"aaa","bbb","ccc" CRLF
zzz,yyy,xxx -
改行 (CRLF)、二重引用符、カンマを含むフィールドは、二重引用符で囲むべきです (shouldである)。例えば:
"aaa","b CRLF
bb","ccc" CRLF
zzz,yyy,xxx -
二重引用符を使用してフィールドを囲む場合、フィールド内に現れる二重引用符は、その前に別の二重引用符を配置することでエスケープしなければなりません (mustである)。例えば:
"aaa","b""bb","ccc"
ABNF文法 (ABNF Grammar) [2] は次のようになります:
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