質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Q&A

解決済

4回答

8556閲覧

CSVファイルに使用する記号のエンコード処理について

annderber

総合スコア98

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

0グッド

1クリップ

投稿2017/09/14 08:15

編集2017/09/14 09:01

お世話になります。

システム間の連携ではcsvファイルを使用することが多いですね。
この前見かけたものではカンマ区切りでダブルクオート無しというフォーマットで、
文字列にカンマや改行を加える場合にはパーセントエンコードをするというのがありました。

私の認識ではこういう場合、バックスラッシュとかを使用してエスケープ処理を入れるものだと思っていました。
しかもパーセントエンコードはurlのエンコードの際に使用するもので、こういった場合には使うことはないとも考えていたのですが。
もしかしたら、ダブルクオート無しのフォーマットで改行を含めるための措置なのでしょうか。
そもそもなじダブルクオート無しのフォーマットにするのか分かりません(政治的理由?)

こういったやり方はありなのでしょうか?

どのような理由でエンコード処理をすると考えられるか、
また皆様のところではどういった形で作られているのか教えていただきたいです。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

CSVって厳密に定義が決まっていないのでありといえばありです。

RFC4180っていうのがありますが、どこまで浸透しているのか・・・

改行(CRLF)、ダブルクォーテーション、カンマを含むフィールドは、ダブルクォーテーションで囲むべきである。

RFCにのっとってるわけではないですが、この対応が多いです。
Excelで取り込めるようにというのが理由です。

投稿2017/09/14 08:32

編集2017/09/14 10:21
momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

annderber

2017/09/14 08:55

コメントありがとうございます。 csvの扱いについては多くの方言があるといいますが、あえてパーセントエンコードにする利点がよく分からないです。当然動きはするのでしょうが、もやもやします。
momon-ga

2017/09/14 10:17

政治的理由というか、CSVは独自の解釈がたくさんあるのが実情で、既存システムを考慮すると一律この方式というのが、決めにくいのだと思います。実際は、ライブラリ化していてエスケープ方法を意識しないようになっていませんか?
annderber

2017/09/14 10:33

コメントありがとうございます。 ライブラリ化されているかどうかはちょっと分からないです。 確かに色々な事情があってそうせざるをえないことがあるのはわかるのですが、あえてパーセントエンコードを使った(使わざるを得なかった)理由が知りたかったのです。私の中ではurlのエンコードに使用する認識でしたので。
guest

0

利点として思いつくのは、CSVファイルをハンドリングするライブラリを持たない言語(環境)で処理が楽。
単にカンマで区切って、項目毎にデコードすれば良いので。

まあ、がんばってちゃんとしたライブラリを一度作っちゃえば良いと言えばそうなのですが。

投稿2017/09/14 13:01

otn

総合スコア84533

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

annderber

2017/09/15 08:42

コメントありがとうございます。 ちなみにエスケープ処理ではなく、パーセントエンコードを使う利点というのは何か考えられるのでしょうか。
otn

2017/09/15 13:08 編集

あなたの言うエスケープ処理が、「,」⇒「\,」のようなことであれば、私の書いたメリットが失われますね。項目中にカンマが現れないようにする必要があります。 他には、「,」⇒「\x2c」というのも考えられますが、「%2c」より長いです。
annderber

2017/09/19 01:32

コメントありがとうございます。
guest

0

ベストアンサー

憶測ですが、自前でエスケープするのが面倒だったから・・・ではないでしょうか?
\と"だけなんですけど。
個人的には人が見てもわかるという利点がなくなってしまうので、避けたいところです。……あっ、パッと見わからないというのが目的なのかな?

投稿2017/09/15 09:21

x_x

総合スコア13749

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

annderber

2017/09/19 00:19

コメントありがとうございます。 確かに自前で用意するのが面倒だったという気もします。
guest

0

どのようなエスケープ文字を使っていようと、そういうデータだと言われればそれまでなので、処理可能な形式であれば、そのデータ仕様に従った処理とします。

ただ、処理が厄介になりそうなものは、変更をお願いします。

以前文字区切り記号が無いCSVで、項目に改行が含まれていたことがあり、文字区切り記号を付加するようお願いしました。

項目区切りの無い固定長データをCSVデータと言い張る相手もいましたね、そういえば。

疑問符が付くようなデータの場合、大体において既存システムがそのような管理を行っている生データだったりします。

投稿2017/09/14 15:11

編集2017/09/14 15:14
sazi

総合スコア25184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

annderber

2017/09/15 08:49

コメントありがとうございます。 場合によっては改行とか、タブを区切り文字にすることもあるそうですね。 確かに言われた仕様に合わせて作ることが多いですが、なんでこうしたのだろうと考えるときがあります。 今回はそのような質問でした。パーセントエンコードを使用する利点って何か考えられますでしょうか
sazi

2017/09/15 09:29 編集

利点は思いつかないですね。一番出現頻度が低かったんじゃないでしょうか。 若しくは、一般的なエスケープ文字を何らかの制御コードで使っていたとか。 逆に他のエスケープ文字で考えられる利点がありますか?(ライブラリがあるとかは抜きにして) どんなエスケープ文字であろうと、そのエスケープ文字を文字として使用したい場合は、その文字を重ねるとかのルールで置き換えるから、どんな文字でもエスケープ文字として使えますし。 何にしても、利点ではなく制約によるものだと思います。
annderber

2017/09/19 01:31

コメントありがとうございます。 ここでのコメントを読ませていただいた感じとして、エスケープ処理のルール化を面倒がったからではないかと考えています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問