RFC4180を読んだのでCSVの書式仕様をまとめる
はじめに
仕事で久しぶりにCSVを入力にしてCSVを出力する処理を作ることになったので、CSVそれ自体に対する理解を深めようということでRFCを読みました。
それを通して、CSVの標準的な仕様を理解できたので、備忘録も兼ねて書式をまとめます。
RFC4180とは
RFC4180(日本語訳)は、CSV(Comma Separated Values)ファイルの一般的な形式を定義し、"text/csv"というMIMEタイプを登録するための文書です。
インターネット標準を確立するものではなく、広く使用されているCSVに関するガイドラインを提供するものです。
実際、改行コードなど様々な仕様のCSVが散見しているのが現状です。
この状況に対して、なんとか標準的な仕様を定義しようという位置づけの文書というわけです。
CSVの書式仕様
要点をまとめると次の通りです。
迷ったらここを見るような用途で記載します。
レコードの区切り:各レコードは改行(CRLF)で区切られる。
最終レコードの終了:最終レコードは改行で終わることも、終わらないこともある。つまり改行の有無はどちらでもいい。
ヘッダ行:ファイルの最初の行に存在することがある。
フィールドの区切り:各レコード内のフィールドはコンマで区切られる。
フィールドのダブルクォート:フィールドはダブルクォートで囲むことができる。改行、ダブルクォート、コンマを含むフィールドは囲む必要がある。
ダブルクォートのエスケープ:フィールド内のダブルクォートは「""」のようにダブルクォートを二つ重ねて表記することでエスケープする。
フィールド内のスペース:フィールド内のスペースはフィールドの一部と見なされ、無視されない。
上記を実際にCSVで表現したものは以下です。
name,age,address,comment[CRLF] <--ヘッダ行は必ずあるとは限らない
Yamada Tarou,18,,[CRLF] <--各フィールドはコンマで区切られる、改行コードはCRLF
Tanaka Hanako,21,"Tokyo,Shibuya",[CRLF] <--改行、ダブルクォート、コンマを含むフィールドは囲む
"Yoshida Takashi","12","",""[CRLF] <--ダブルクォートで囲むことができる
Takahashi Ichiro,16,,"He is ""nice""."[CRLF] <--ダブルクォートは「""」で表現する
Nakajima Jirou,20, ,[CRLF] <--フィールド内の空白は無視されない
<--最後が必ず改行だとは限らない
まとめ
とりあえず以下を見れば概ねCSVの仕様は把握できるでしょう。
name,age,address,comment[CRLF]
Yamada Tarou,18,,[CRLF]
Tanaka Hanako,21,"Tokyo,Shibuya",[CRLF]
"Yoshida Takashi","12","",""[CRLF]
Takahashi Ichiro,16,,"He is ""nice""."[CRLF]
Nakajima Jirou,20, ,[CRLF]
さいごに
今回紹介した通りの仕様になっていないCSVはたくさんありますが、標準仕様を知っておくと足がかりができるので便利ですね。
RFC万歳。自分でCSVを書いたり出力したりするときは意識したいですね。
最後までご覧いただき誠にありがとうございました。