メインコンテンツへスキップ

CSV 仕様の基礎

CSV は「Comma-Separated Values」の略で、 項目をカンマで区切ったテキスト形式のデータ表現です。 標準仕様は RFC4180 として定義されています。 シンプルな見た目に反して、文字コード・改行コード・引用符・特殊文字など、多くの注意点があります。

RFC4180 の概要

CSV の事実上の標準仕様。要点は以下のとおりです:

・各レコード(行)は CRLF で終わる(最終行の改行は任意)

・フィールド(セル)はカンマで区切る

・ダブルクォート(")で囲むことで、カンマ・改行・ダブルクォートを含められる

・ダブルクォート自体は "" (2 つ重ねる)でエスケープ

・ヘッダ行の有無は実装依存(仕様としては「あってもなくてもよい」)

改行コード(CRLF / LF / CR)

CRLF: Windows 標準(\r\n = 0x0D 0x0A)

LF: Mac / Unix 標準(\n = 0x0A)

CR: 古い Mac OS 9 以前(\r = 0x0D)

RFC4180 は CRLF を指定していますが、実運用では LF のみのファイルも多く流通しています。 本ツールは すべて自動で LF に正規化 してから比較するため、 「中身は同じだが改行コードが違う」だけで差分扱いされることはありません。

文字コード(UTF-8 / Shift_JIS / BOM)

UTF-8(推奨): 世界標準の Unicode 形式。本ツールは UTF-8 を前提に動作します。

UTF-8 BOM 付き: ファイル先頭に「これは UTF-8 ですよ」というマーカー(0xEF 0xBB 0xBF)が付いた形式。 Excel が自動判別しやすくなる利点があります。 本ツールは BOM を自動除去して読み込みます。

Shift_JIS(CP932): Windows 日本語環境で長らく使われてきた形式。 海外ソフトで開くと文字化けしやすいため、現在は UTF-8 への移行が推奨されています。 本ツールでは未対応のため、事前に変換が必要です。

文字コード変換ツールでブラウザ内で SJIS ↔ UTF-8 を変換できます。

ダブルクォートのエスケープ

CSV のセル値に , や改行や " が含まれる場合は、 セル全体をダブルクォートで囲み、内側のダブルクォートは "" (2 つ重ね)でエスケープします。

:

Hello, "World" "Hello, ""World"""

Line1 Line2 "Line1 Line2"

区切り文字の違い

カンマ: 標準 CSV(本ツール対応)

タブ: TSV(Tab-Separated Values)。 本ツールでは未対応のため、Excel やテキストエディタでカンマ区切りに変換してください。

セミコロン: 欧州系の CSV(特にフランス・ドイツ)。 小数点にカンマを使う文化圏では、区切り文字としてセミコロンを採用するため。 本ツール未対応。

数値・日付の罠

CSV をそのまま Excel で開くと、以下のような自動変換が起きがちです:

先頭ゼロが消える: 0077

大きい数値が指数表記に: 12345678901231.23457E+12

日付に自動変換: 1-2-32001/2/3

これらを避けるには、Excel の「データ → 区切り位置」 で列のデータ形式を「文字列」に指定してインポートします。

CSV Injection(数式インジェクション)

=, +, -, @ で始まるセル値は、 Excel で開いた時に数式として実行されてしまう脆弱性があります。 たとえば =HYPERLINK("http://evil...") のような値がセルに入っていると、 Excel を起動したユーザーが意図せず外部リソースへアクセスする可能性があります。

本ツールは出力時にこれらの先頭文字を自動でシングルクォート(')でクオートし、 数式実行を抑止します(OWASP 推奨対応)。