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

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

ただいまの
回答率

90.61%

  • CSV

    606questions

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

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

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 394

annderber

score 66

お世話になります。

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

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

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

+3

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

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/14 17:55

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

    キャンセル

  • 2017/09/14 19:17

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

    キャンセル

  • 2017/09/14 19:33

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

    キャンセル

+2

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/15 17:42

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

    キャンセル

  • 2017/09/15 22:06 編集

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

    キャンセル

  • 2017/09/19 10:32

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

    キャンセル

checkベストアンサー

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/19 09:19

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

    キャンセル

+1

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

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

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/15 17:49

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

    キャンセル

  • 2017/09/15 18:21 編集

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

    キャンセル

  • 2017/09/19 10:31

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

    キャンセル

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • CSV

    606questions

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