開発者向け

CSV のカンマや改行はどう区別する? RFC 4180 を読む

CSV ファイルで住所や自由記述のようにカンマや改行を含む値を扱うと、列がずれて壊れることがあります。事実上の標準 RFC 4180 がこの問題をどう解決しているかを、具体例とともに整理します。

「カンマ区切り」なのにカンマを含む値がある

CSV (Comma-Separated Values) は、値をカンマで区切っただけの単純なテキスト形式です。ところが実際のデータでは、住所の「東京都, 千代田区」のようにカンマそのものを含む値や、自由記述欄のように改行を含む値が普通に存在します。カンマで区切るだけの素朴な実装では、こうした値を書き出すと列の数がずれ、読み込むプログラム側で正しく解釈できなくなります。

事実上の標準 RFC 4180 が定めるルール

CSV には ISO や JIS のような強制力を持つ公的規格はありませんが、IETF が 2005 年に公開した情報提供用の文書 RFC 4180 が、多くの表計算ソフトやプログラミング言語のライブラリが実際に従う「事実上の標準」として機能しています。RFC 4180 が定める主なルールは次のとおりです。

要素 ルール
フィールドの区切り カンマ (,)
レコード (行) の区切り CRLF (\r\n)
カンマ・改行・ダブルクォートを含む値 フィールド全体をダブルクォート (") で囲む
値の中にあるダブルクォート自体 ダブルクォートを 2 つ連続させてエスケープする ("")
ヘッダー行 任意 (RFC 4180 自体は必須にしていないが、1 行目を列名にする慣習が広く使われている)

たとえば「佐藤, 太郎」という値をそのまま書くと name,佐藤, 太郎,age のように列がずれてしまいますが、RFC 4180 の規則に従えば次のように書きます。

name,age
"佐藤, 太郎",34
"改行を
含む値",0

1 行目はヘッダーで、2 行目の "佐藤, 太郎" はダブルクォートで囲まれているため、内部のカンマは区切りとして解釈されず 1 つの値として読み取られます。3 行目のようにフィールド内に改行があっても、ダブルクォートで囲まれている間は 1 つのレコードとして扱われ、次の " が閉じるまでレコードは終わりません。

ダブルクォート自体を値に含めたい場合

値そのものに " を含めたいときは、2 つ連続させてエスケープします。たとえば 彼は"OK"と言った という値は、次のように書きます。

comment
"彼は""OK""と言った"

読み込み側は、クォートで囲まれた区間の中で "" が出てきたら「区間の終わり」ではなく「" という 1 文字」と解釈し、その後に続く文字も同じフィールドの一部として読み進めます。

実務で注意したい点

まとめ

RFC 4180 の原文 (英語) は IETF の RFC Editor サイトで公開されています。https://www.rfc-editor.org/rfc/rfc4180

関連ツール

公開: 2026-10-16