【詳細③】CSV:いちばん身近で、いちばん曖昧な形式

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/

総集編へ戻る

コメント

タイトルとURLをコピーしました