RFC4180 を読んだ
CSV についての RFC である RFC4180 を読んだのでメモ。
導入
- CSV が広く普及したあとでも正式なドキュメントは作られてこなかった
- TSV については専用の MIME type がある(text/tab-separated-values)けど、CSV は作られてこなかった
- この RFC は CSV のフォーマットについてまとめたものであり、RFC 2048 に従って text/csv MIME type を登録するものである
CSV フォーマットの定義
- CSV フォーマットの定義や実装はいくつかの種類があり、公式の定義は存在しない
- ここではだいたいの実装で認められている定義をリストする
- 1行目に値のフィールド名を示すヘッダーを付けても良い
- ヘッダーの有無は MIME type の header パラメーターに present もしくは absent と示す必要がある
- スペースはフィールドと見なし、無視されてはならない
- 最後のフィールドの末尾にはコンマがあってはならない
- それぞれの値はダブルクオートで囲んでも良いし、囲まなくても良い
- 改行(CRLF)、ダブルクオート、コンマが値に入る場合は、ダブルクオートで囲む必要がある
- 特に、ダブルクオートが入る場合は更にダブルクオートによってエスケープする必要がある
- “ を値に含めたいときは ”“ となる
- US-ASCII charset での使用が一般的だが、IANA の text ツリーで定義されているその他の文字セットが charset パラメータで指定されて利用されることもある
- ABNF で CSV のフォーマットを表すと以下のようになる
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