作成 2010.01.07
更新 2010.01.07
CSVフォーマット
CSVファイルに入っている可能性のあるパターンです。
目次
RFC4180準拠
基本
ヘッダーはあってもなくてもよい
空データフィールドがある
前後にスペースがあっても無視しない
ダブルクォーテーションで囲む場合は同じレコードのすべてのフィールドをダブルクォーテーションで囲む
改行、ダブルクォーテーション、カンマを含むフィールドは、ダブルクォーテーションで囲むべき
ダブルクォーテーションで囲まれているフィールドでダブルクォーテーションを使用する場合は、ダブルクォーテーションでエスケープする
非常に長い文字列を考慮
複合パターン
RFC4180非準拠
カンマで終わる
(RFC未言及)ダブルクォーテーションで囲まれているフィールドの前後に空白がある
フィールド数が異なる
ダブルクォーテーションで囲まれているフィールドと囲まれていないフィールドが混在する
ダブルクォーテーションのエスケープが崩れている
(RFC想定外)カンマ(0x2c)に相当する文字が存在する
複合パターン
RFC4180準拠
基本

フィールドはカンマで区切る。
改行は CRLF、LF、CR のいずれの可能性もある。
ファイル末尾に改行コードがある場合とない場合がある。

aaa,bbb,ccc
aaa bbb ccc
ヘッダーはあってもなくてもよい
field_1,field_2,field_3
aaa,bbb,ccc
field_1 field_2 field_3
aaa bbb ccc
空データフィールドがある
aaa,,ccc
aaa ccc
前後にスペースがあっても無視しない
aaa, bbb , ccc
aaa  bbb   ccc
ダブルクォーテーションで囲む場合は同じレコードのすべてのフィールドをダブルクォーテーションで囲む
"aaa","bbb","ccc"
zzz,yyy,xxx
aaa bbb ccc
zzz yyy xxx
改行、ダブルクォーテーション、カンマを含むフィールドは、ダブルクォーテーションで囲むべき
"aaa","bb
b","ccc"
"aaa","bb,b","ccc"
aaa bb
b
ccc
aaa bb,b ccc
ダブルクォーテーションで囲まれているフィールドでダブルクォーテーションを使用する場合は、ダブルクォーテーションでエスケープする
"aaa","bb""b","ccc"
aaa,bb"b,ccc
aaa bb"b ccc
aaa bb"b ccc
非常に長い文字列を考慮
"abcdefghi1abcdefghi2abcdefghi3abcdefghi4abcdefghi5abcdefghi6abcdefghi7abcdefghi8abcdefghi9abcdefghi0
abcdefghi1abcdefghi2abcdefghi3abcdefghi4abcdefghi5abcdefghi6abcdefghi7abcdefghi8abcdefghi9abcdefghi0
abcdefghi1abcdefghi2abcdefghi3abcdefghi4abcdefghi5abcdefghi6abcdefghi7abcdefghi8abcdefghi9","bbb","ccc"
abcdefghi1abcdefghi2abcdefghi3abcdefghi4abcdefghi5abcdefghi6abcdefghi7abcdefghi8abcdefghi9abcdefghi0
abcdefghi1abcdefghi2abcdefghi3abcdefghi4abcdefghi5abcdefghi6abcdefghi7abcdefghi8abcdefghi9abcdefghi0
abcdefghi1abcdefghi2abcdefghi3abcdefghi4abcdefghi5abcdefghi6abcdefghi7abcdefghi8abcdefghi9
bbb ccc
複合パターン
"aaa","bb""b","cc
k
c"
aaa,bb"b,ccc
"aaa","bb,b","ccc"""
aaa bb"b cc
k
c
aaa bb"b ccc
aaa bb,b ccc"
RFC4180非準拠

本来であれば例外を返すべきです。

カンマで終わる
aaa,bbb,
aaa bbb
(RFC未言及)ダブルクォーテーションで囲まれているフィールドの前後に空白がある
"zzz ", "yyy " , " xxx "
zzz   "yyy "   " xxx "
フィールド数が異なる
field_1,field_2,field_3
aaa,bbb
aaa,bbb,ccc
aaa,bbb,ccc,ddd
field_1 field_2 field_3 (4)
aaa bbb
aaa bbb ccc
aaa bbb ccc ddd
ダブルクォーテーションで囲まれているフィールドと囲まれていないフィールドが混在する
aaa,"bbb",ccc
"xxx",yyy,"zzz"
aaa bbb ccc
zzz yyy xxx
ダブルクォーテーションのエスケープが崩れている

正直こんな風に処理してよいものか判断に苦しむ。

"aaa","bb" "b","ccc"
aaa bb "b" ccc
(RFC想定外)カンマ(0x2c)に相当する文字が存在する

JISとUTF-16は使用しないほうが無難ですね。

Char Code,Char,Code
JIS,↑,0x222c
JIS,,0x232C
JIS,が,0x242c
JIS,ガ,0x252c
JIS,Μ(大文字のミュー),0x262c
JIS,К(大文字のカー),0x272c
JIS,━(罫線),0x282c
JIS,階,0x332c
JIS,巻,0x342c
JIS,ほか多数,---
UTF-16,∬,0x222c
UTF-16,L,0xff2c
UTF-16,Ь(キリル文字の大文字の軟音符),0x042c
UTF-16,┬,0x252c
UTF-16,ほか多数,---
Char Code Char Code
JIS 0x222c
JIS 0x242c
JIS 0x252c
JIS Μ(大文字のミュー) 0x262c
JIS К(大文字のカー) 0x272c
JIS ━(罫線) 0x282c
JIS 0x332c
JIS 0x342c
JIS ほか多数 ---
UTF-16 0x222c
UTF-16 0xff2c
UTF-16 Ь(キリル文字の大文字の軟音符) 0x042c
UTF-16 0x252c
UTF-16 ほか多数 ---
複合パターン
field_1,field_2,field_3
"aaa", "bbb "
aaa,bb"b,"c""cc",
aaa,"b
bb",ccc,ddd
field_1 field_2 field_3 (4)
aaa  "bbb "
aaa bb"b c"cc
aaa b
bb
ccc ddd
タグ: RFC

©2004-2017 UPKEN IPv4