メインコンテンツまでスキップ

2. CSVフォーマットの定義 (Definition of the CSV Format)

CSVフォーマットにはさまざまな仕様と実装が存在しますが (例: [4], [5], [6], [7])、正式な仕様は存在せず、CSVファイルの解釈は多様化しています。本セクションでは、ほとんどの実装で従われていると思われるフォーマットを文書化します:

  1. 各レコード (Record) は改行 (CRLF) で区切られた別々の行に配置されます。例えば:

    aaa,bbb,ccc CRLF
    zzz,yyy,xxx CRLF
  2. ファイルの最後のレコードは、末尾に改行がある場合とない場合があります。例えば:

    aaa,bbb,ccc CRLF
    zzz,yyy,xxx
  3. ファイルの最初の行として、通常のレコード行と同じフォーマットでオプションのヘッダー行 (Header Line) が現れることがあります。このヘッダーは、ファイル内のフィールドに対応する名前を含み、ファイルの残りのレコードと同じ数のフィールドを含むべきです (shouldである) (ヘッダー行の有無は、このMIMEタイプのオプションパラメータ "header" で示されるべきです)。例えば:

    field_name,field_name,field_name CRLF
    aaa,bbb,ccc CRLF
    zzz,yyy,xxx CRLF
  4. ヘッダーおよび各レコード内には、カンマで区切られた1つ以上のフィールド (Field) があります。各行は、ファイル全体を通して同じ数のフィールドを含むべきです (shouldである)。スペースはフィールドの一部と見なされ、無視すべきではありません (should notである)。レコードの最後のフィールドの後にカンマを付けてはなりません (must notである)。例えば:

    aaa,bbb,ccc
  5. 各フィールドは二重引用符で囲まれる場合と囲まれない場合があります (mayである) (ただし、Microsoft Excelなどの一部のプログラムは二重引用符をまったく使用しません)。フィールドが二重引用符で囲まれていない場合、フィールド内に二重引用符を含めてはなりません (may notである)。例えば:

    "aaa","bbb","ccc" CRLF
    zzz,yyy,xxx
  6. 改行 (CRLF)、二重引用符、カンマを含むフィールドは、二重引用符で囲むべきです (shouldである)。例えば:

    "aaa","b CRLF
    bb","ccc" CRLF
    zzz,yyy,xxx
  7. 二重引用符を使用してフィールドを囲む場合、フィールド内に現れる二重引用符は、その前に別の二重引用符を配置することでエスケープしなければなりません (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