none
sapの特殊文字が混入するcsvファイルをSSISで取り込む場合の対処方法 RRS feed

  • 質問

  • csvファイルをSSIS(SQLServer2012のSSIS)で取り込むプログラムを設計中なのですが、

    送信元の担当者(お客様)からは、ファイルの中に特殊文字が入っており、これをRFC準拠のエスケープシーケンスを付与してくる想定です。

    との事で、SSIS側でどのようにすれば対応できるのか調査中です。

    csvファイルのデータ元はOracleなのですが、Oracleにはsapからデータを取り込んでいるため、特殊文字が入ってくるようです。

    csvファイルの文字コードはShift-JIS、各項目値は全てダブルクォーテーションで括る事になっています。

    そこで質問なのですが、

    質問1.上記の場合にSSISでcsvファイルを取り込む際に、どのような対応が必要で

         具体的にどう対処すれば良いのか教示いただけないでしょうか?

    質問2.RFC準拠のエスケープシーケンスとは何の文字に該当するのでしょうか?

    宜しくお願いいたします。

    2015年3月4日 6:43

回答

  • RFC はドキュメント群ですので、RFC の何番の話か、どのドキュメントの話か、が分からないことには分からないかと。
    それを知っているのは RFC 準拠と言っている方なので、その方に聞くべきかと思います。
    SSIS でどのような対応が必要かも上記に依存する話ですので、ご提示の情報だけでは分からない話かと思います。

    MCITP(Database Developer/Database Administrator)

    • 回答としてマーク 星 睦美 2015年3月10日 5:11
    2015年3月5日 7:55
  • 一般にCSVとRFCといえばRFC4180ですが、これによればエスケープとは「項目をダブルコーテーションでくくれば、その中にはカンマとか改行コードを入れられます。その中にダブルクオテーションを入れたい場合は2つ連続にすること」とはあります。

    ただ、「エスケープシーケンス」なので違う気もします。

    一番有名なエスケープシーケンスは、ISO-2022-JPの奴ら(RFC1468)ですが、Shift-JISなのでこれも当てはまりませんね。まさかESC $ Bを使って文字コードを切り替えるようなものをShift-JISと呼称することはないでしょう。

    とすると、RFC5137(ASCII Escaping of Unicode Characters)っぽい気がします。UNICODE文字を\u00A1とか\u'00A2'とかで表現する方法です。であれば、質問2の「何の文字」といわれると、「UNICODE全域」が渡ってくる可能性がありますね(今は110万字でしたか)。
    SSISで処理する方法はわかりませんが、何かしらのフィルタでUTF-16に変換してNVARCHARとかに突っ込む手でしょうか。



    jzkey

    • 回答としてマーク 星 睦美 2015年3月10日 5:11
    2015年3月5日 8:35

すべての返信

  • RFC はドキュメント群ですので、RFC の何番の話か、どのドキュメントの話か、が分からないことには分からないかと。
    それを知っているのは RFC 準拠と言っている方なので、その方に聞くべきかと思います。
    SSIS でどのような対応が必要かも上記に依存する話ですので、ご提示の情報だけでは分からない話かと思います。

    MCITP(Database Developer/Database Administrator)

    • 回答としてマーク 星 睦美 2015年3月10日 5:11
    2015年3月5日 7:55
  • 一般にCSVとRFCといえばRFC4180ですが、これによればエスケープとは「項目をダブルコーテーションでくくれば、その中にはカンマとか改行コードを入れられます。その中にダブルクオテーションを入れたい場合は2つ連続にすること」とはあります。

    ただ、「エスケープシーケンス」なので違う気もします。

    一番有名なエスケープシーケンスは、ISO-2022-JPの奴ら(RFC1468)ですが、Shift-JISなのでこれも当てはまりませんね。まさかESC $ Bを使って文字コードを切り替えるようなものをShift-JISと呼称することはないでしょう。

    とすると、RFC5137(ASCII Escaping of Unicode Characters)っぽい気がします。UNICODE文字を\u00A1とか\u'00A2'とかで表現する方法です。であれば、質問2の「何の文字」といわれると、「UNICODE全域」が渡ってくる可能性がありますね(今は110万字でしたか)。
    SSISで処理する方法はわかりませんが、何かしらのフィルタでUTF-16に変換してNVARCHARとかに突っ込む手でしょうか。



    jzkey

    • 回答としてマーク 星 睦美 2015年3月10日 5:11
    2015年3月5日 8:35
  • フォーラム オペレーターの星 睦美です。
    micro1013 さん、こんにちは。

    引き続き返信がありませんが、ユーザーからの情報を参考にしていただけたのではないかと思います。
    今回は私のほうで[回答としてマーク] させていただきました。
    これからもフォーラムをお役立てください。

    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2015年3月10日 5:15
  • ご指摘ありがとうございます。

    担当者とお話しさせていただきまして、RFC4180の事を指しておられました。

    また、特殊文字はCSV出力時に変換していただけることになりましたので、取り込み側にて考慮の必要がなくなりました。

    2015年3月10日 7:05
  • ご返事ありがとうございます。

    仰る通り、RFC4180の事でした。

    その後、担当者と話させていただきまして、

    特殊文字はCSV出力時に変換していただけることになりましたので、取り込み側にて考慮の必要がなくなりました。

    2015年3月10日 7:06