カンマ区切りのテキスト形式の標準的なフォーマットであるCSV形式についてのメモです。
様々なソフトでCSV形式が扱われていますが、ちゃんとした規格が定められていなかったため、二重引用符(”)の扱いなど互換性が無い場合もあるようです。
後付という形ですが、2005年にRFC 4180としてCSV形式についてまとめられています。
基本ルール
- 各レコードは改行(CR LF)によって区切られる。ファイル終端は改行は無くても構わない。
- 各レコードは1つ以上のフィールドを含む。フィールドはカンマで区切る。
- 各フィールドは二重引用符(ダブルクォーテーション)で囲んでも囲まなくても構わない。
- 二重引用符で囲まれたフィールドに、二重引用符を含む場合は連続して記述("")し、エスケープする。
最後のフィールドはカンマで終わっていはいけない。
私的懸念事項
私自身が今まで考えていた扱いと異なるのは2点。
- フィールド内に改行を含むことが可能になっている。
- 最後のフィールドはカンマで終わってはいけない。
ファイルからテキストモードで1行ずつ読んで・・・といった形が取れないので、少々面倒な仕様になっている。
また、最後のフィールドがカンマで終われないとすると、最後のフィールドが空欄だったらどう記述したら?あ、二重引用符で空文字にすればいいのか。
キャラクタコード
COMMA | 0x2C |
CR | 0x0D |
LF | 0x0A |
DQUOTE | 0x22 |
CRLF | 0x0D 0x0A |
TEXTDATA | 0x20-0x21, 0x23-0x2B, 0x2D-0x7E |
マルチバイト圏としては8ビットコードが除外されてるのが気になりますが。
2008-06-09 komina