TimerTrigger/SpringBatch

CSVファイルの内容をDBに書き込む前にファイルの文字コードを判定してみた

バッチ処理でCSVファイルの内容をDBに書き込む際、ファイルの文字コードをチェックしたい場合があるが、その際に、文字コードを判定するライブラリを利用すると便利である。

今回は、juniversalchardetというMozillaによって提供されているライブラリを利用して、ファイルの文字コードを判定し、その文字コードを利用してファイルを読み込むよう修正してみたので、そのサンプルプログラムを共有する。

なお、juniversalchardetについては、以下のサイトを参照のこと。
https://qiita.com/aaaanwz/items/1554afadc44cb5cf3a80

今回のサンプルプログラムでは、上記サイトのサンプル1のプログラムを流用している。

前提条件

下記記事のサンプルプログラムを作成済であること。

TimerTriggerによって動作するAzure Function上でCSVファイルの内容をDBに書き込んでみたTimer Triggerによって、一定時間が来たタイミングでAzure Functionsが動作するアプリケーションを生成し、そのバッ...

作成したサンプルプログラムの修正

作成したサンプルプログラムの構成は以下の通り。
サンプルプログラムの構成
なお、上記の赤枠は、前提条件のプログラムから変更したプログラムである。

pom.xmlに追加した内容は以下の通りで、文字コードを判定するjuniversalchardetというライブラリを追加している。

また、文字列のユーティリティクラスは以下の通りで、文字コードを判定するgetCharsetNameというメソッドを追加している。



さらに、DemoBatchService.javaの内容は以下の通りで、CSVファイルを読み込む際の文字コードを判定し、その文字コードを利用してファイルを読み込むよう修正している。その際、文字コードがShift_JISだった場合は、MS932として読み込むようにしている。

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/azure/tree/master/timer-trigger-batch-character-code/demoAzureFunc



サンプルプログラムの実行結果

サンプルプログラムの実行結果は、以下の通り。

1) 取り込むCSVファイルの文字コードがShift_JISの場合の、CSVファイル・ログ・取り込み後のDBの内容は以下の通りで、ファイルを読み込む際の文字コードをMS932として、DBに書き込まれることが確認できる。
取り込みCSVファイル_SJIS

サンプルプログラムの実行結果_ログ_SJIS サンプルプログラムの実行結果_DB_SJIS

2) 取り込むCSVファイルの文字コードがUTF-8の場合の、CSVファイル・ログ・取り込み後のDBの内容は以下の通りで、ファイルを読み込む際の文字コードをUTF-8として、DBに書き込まれることが確認できる。
取り込みCSVファイル_UTF8

サンプルプログラムの実行結果_ログ_UTF8 サンプルプログラムの実行結果_DB_UTF8

3) 取り込むCSVファイルの文字コードがEUC_JPの場合の、CSVファイル・ログ・取り込み後のDBの内容は以下の通りで、ファイルを読み込む際の文字コードをEUC_JPとして、DBに書き込まれることが確認できる。
取り込みCSVファイル_EUCJP

サンプルプログラムの実行結果_ログ_EUCJP サンプルプログラムの実行結果_DB_EUCJP

要点まとめ

  • ファイルの文字コードを判定するライブラリの1つとして、juniversalchardetというMozillaによって提供されているライブラリが利用できる。