文字コードへの変換の際の変換不能文字の検知について

Avatar
小池 俊晴

お世話になります。

CSV読み取り、CSV書き込みで、エンコードに指定した文字コードへの変換で、UTF-8からShift-JISへ変換する際、前者に存在して後者に存在しない文字コードは変換不能文字として"?"へ置換されますが、これを、例外として検知し、"?"に置換された文字の情報("?"に置換される前の元の文字、元の文字のバイト位置)をログ出力することはできないでしょうか。

以上、よろしくお願いいたします。

この記事は役に立ちましたか?

0が役に立ったといっています

コメント

  • Avatar
    sakusakupanda
    コメントアクション Permalink

    CSV書き込み前に検知するのは難しいと思いますので、

    Shift-JISで出力したCSV書き込み先ファイルを、CSV読み取り元ファイルと1行ずつ比較して、差分があれば出力する、という動作を行わせれば良さそうですね。

    が…DataSpiderで1行ずつ比較させる方法が思いつきません…

     

    DataSpiderでの処理にこだわらないのであればコマンドプロンプトのfor/fコマンドでそれぞれのCSVファイルを1行ずつ読み込んで比較する処理をバッチファイルで作成し、外部アプリケーション起動で実行させるなどはいかがでしょうか…

    0
  • Avatar
    小池 俊晴
    コメントアクション Permalink

    sakusakupanda さん
    コメントありがとうございました。

    > Shift-JISで出力したCSV書き込み先ファイルを、CSV読み取り元ファイルと1行ずつ比較して、差分が
    > あれば出力する、という動作を行わせれば良さそうですね。
    はい、その方法でいけそうです。

    > が…DataSpiderで1行ずつ比較させる方法が思いつきません…
    入力・出力ファイル両方に行番号を振って、同じ行番号同士を比較する、という方法では
    どうでしょうか。データの内容が確認できていないのですが、レコードを一意に識別する
    キー項目が存在するかもしれません。

    > DataSpiderでの処理にこだわらないのであればコマンドプロンプトのfor/fコマンドでそれぞれのCSV
    > ファイルを1行ずつ読み込んで比較する処理をバッチファイルで作成し、外部アプリケーション起動で
    > 実行させるなどはいかがでしょうか…
    そうですね、その手もありますね。
    今回の文字コード変換対象のデータファイルは比較的、サイズが小さいようなので、
    forループで1行ずつ比較するのでも大丈夫かと思うのですが、サイズが大きくなると
    性能面で心配です。

    頂いたコメントを基にして、考えて試してみます。
    何らかの方法でできたら、こちらに再投稿したいと思います。

    ありがとうございました。

    0

ログインしてコメントを残してください。