CSVには「正式な仕様」がない
CSVは、表計算ソフトの間でデータをやり取りする方法として、長く使われてきました。
ところが、CSVについて解説したRFC 4180自身が、「これまで正式に文書にされたことがなく、単一の正式な仕様もない」と認めています。
そのため解釈の幅が広く、ソフトによる違いが大きいとはっきり書かれています [C1]。
しかもRFC 4180は、インターネットの「標準」ではなく、あくまで「参考情報(Informational)」という扱いです。
文書の冒頭にも、標準を定めるものではないと断り書きがあります [C1]。
「たいていのソフトが従っている形」
RFCは、多くのソフトが従っているとみられる形を、次のように整理しています [C1]。
- 1行が1件のデータ。行の区切りは改行(CRLFという種類の改行)。最後の行の後ろの改行は、あってもなくてもよい
- いちばん上に、項目名の行(ヘッダー)を置いてもよい。置く場合、項目の数は他の行と同じにする
- 項目はカンマで区切る。スペースも項目の一部として扱う。行の最後の項目の後ろに、カンマは付けない
- 項目全体をダブルクォート(”)で囲んでもよい。囲まない項目の中では、ダブルクォートは使えない
- 改行・ダブルクォート・カンマを含む項目は、ダブルクォートで囲む
- 囲んだ項目の中でダブルクォートを使うときは、2つ重ねて書く
id,name,comment
1,hoge,"改行を含む
コメント"
2,kome,"カンマ, を含む"
3,dobe,"""引用""を含む"
ファイルの種類を示すラベルと、文字コード
CSVのラベル(メディアタイプ)は text/csv です。このラベルには、ヘッダー行があるかどうかや、使っている文字コードを書き添えることができます。
書き添えない場合は、受け取る側が自分で判断する必要があります [C1]。
2005年のRFCでは、一般的な使われ方としてASCII(英数字中心の文字コード)が挙げられ、それ以外を使うときはラベルで示す、とされています [C1]。
注記:RFC 4180が出たのは2005年です。
たとえば「Excelはダブルクォートを使わない」という記述は、当時の情報です。
今のExcelがどう動くかは、このRFCからは判断できません [C1]。
RFC 4180の「改訂案」はあるが、標準ではない
RFC 4180を更新しようという提案(Internet-Draft)が存在します。
CSVの形式が変わってきたことを受けて、基本の文字コードをUTF-8とする案などが書かれています [C2]。
注記:これは「草案(作業途中の案)」で、有効期限が切れた版もあります。
正式に採用された標準ではないので、「CSVの基本はUTF-8」と言い切る根拠にはなりません [C2]。
CSVを扱うときの実務上のポイント
- 書き方のルールを、相手と合わせる。RFC自身がソフトごとの違いの大きさを認めているので、渡す相手のルールを先に確認する
- 文字コードをはっきり決める。RFCは一つに決めておらず、ラベルで示す仕組みがある
- ヘッダー行があるかどうかを決めておく。RFCも、示さない場合は受け取る側で判断するとしている
注記:この3点は、RFCの記述(ソフトごとの違い・文字コード・ヘッダー行の有無)から、
私が実務向けに導いたポイントです。
RFCがこの運用を指示しているわけではありません [C1]。
参照元
[C1] IETF, RFC 4180: Common Format and MIME Type for CSV Files — https://datatracker.ietf.org/doc/html/rfc4180
[C2] IETF Internet-Draft, draft-shafranovich-rfc4180-bis-03 — https://datatracker.ietf.org/doc/draft-shafranovich-rfc4180-bis/03/

コメント