CSV ファイルとは:型もエンコーディングも標準化団体もない形式
CSV とは実際に何なのか、同じファイルが表計算ソフトによって違って開く理由、引用符のルールが実際に何を定めているかを解説。CSV はブラウザ内で変換でき、アップロード不要です。
概要
- 種類
- ドキュメント
- 拡張子
- .csv
- MIME タイプ
- text/csv
.csv ファイルはテキストファイルです。ヘッダーも、バージョンも、型の情報も、バイナリの部分もありません。メモ帳で開けば、すべてのバイトが見えます。1 行が 1 つの行で、何かがフィールドを区切っている。形式はそれだけです。だからこそ何でも CSV を書き出せ、そしてその意味について 2 つのプログラムの意見が一致することはありません。
続きを読む
CSV は 25 年間、仕様なしで使われてきました。2005 年に RFC 4180 が登場しましたが、これは明確に標準ではなく「情報提供(Informational)」扱いで、誰かに何をすべきか指示するのではなく、ほとんどの実装がしていることを記述したものです。この RFC がはっきり定めているのは引用符の扱いです。区切り文字、引用符、改行を含むフィールドはダブルクォートで囲み、そうしたフィールドの中の引用符は 2 つ重ねて書きます。このルールこそが、「Widget, large」が 1 つのセルになるか 2 つになるかの違いであり、素朴なパーサーが飛ばしてしまうルールです。
区切り文字がいつもカンマとは限りません。小数を 1,5 のように書くロケールで動く表計算ソフトは、フィールドの区切りにもカンマを使うわけにはいかないので、Excel はそこではセミコロンで書き出します。同じマシンの同じメニューから、隣の国では開けないファイルができるのです。データベースの書き出しではタブもよく使われます。CSV をうまく読めるツールはどれも最初の数行から推測しており、このサイトも同じようにしています。
エンコーディングの宣言もなく、実際にデータが失われるのはここです。あるプログラムで保存した中国語の名前の CSV を別のプログラムで開くと、一方が UTF-8、もう一方がシステムのコードページを前提にしたために、文字化けして戻ってきます。そしてすべてのフィールドが型のないテキストなので、表計算ソフトは読み込み時に改めて推測します。品番から先頭のゼロが消え、長い識別番号が指数表記になり、日付に見えるものはすべて日付になります。ファイルに問題はなく、問題があったのは読み方のほうです。
CSV を他の形式に変換
CSV:よくある質問
CSV はただのテキストファイルですか?
はい、完全にそうです。コンテナも圧縮もなく、バイナリの部分もありません。どのテキストエディターでも開け、見えているものがそのまま中身です。
なぜ CSV がセミコロンで区切られているのですか?
カンマが小数点として使われるロケールで書き出されたので、カンマをフィールドの区切りにも使えなかったからです。それでも CSV であることに変わりはなく、使う価値のある読み込みツールなら、決めつけずに区切り文字を検出します。
なぜ先頭のゼロが消えたのですか?
CSV は型を保存せず、表計算ソフトが推測したからです。「007」は数値に見えるので 7 になりました。ファイルに問題はなく、読み込みがそう決めたのです。ほとんどの表計算ソフトでは読み込み時に列をテキストに設定でき、それが唯一の確実な対処法です。
なぜ中国語の文字が文字化けするのですか?
ファイルが自分のエンコーディングを何も表明しておらず、開いたプログラムが書いたプログラムとは違う推測をしたからです。Excel に正しく読ませるにはバイトオーダーマーク付きの UTF-8 で保存します。ただしその目印は、ほかの一部のツールでは余計な文字として表示されてしまいます。
ここで CSV を PDF に変換できますか?
はい。カンマで単純に分割するのではなく CSV として解析するので、引用符で囲まれたフィールドも壊れず、列幅は中身に合わせて決まり、見出し行は太字になります。得られるのは読んだり印刷したりするためのもので、PDF の中では並べ替えも合計もできません。
Excel への変換はどうですか?
必要ありません。どの表計算ソフトも CSV を直接開けますし、先に変換すると型が推測される工程が 1 つ増えるだけです。ここにある変換は逆方向の PDF から Excel への変換で、表を記録していないページから表を組み立て直します。