TimerTrigger/SpringBatch

juniversalchardetというライブラリで、ファイルの日本語が少ない場合や無い場合の文字コードを判定してみた

ファイルの文字コードを判定するライブラリの1つとして、juniversalchardetというMozillaによって提供されているライブラリがあるが、このライブラリを利用すると、ファイルに含まれる日本語が少ない場合は「WINDOWS-1252」が、ファイルに含まれる日本語が無い場合は「null」が返却される。

今回は、juniversalchardetというライブラリを利用して、ファイルの日本語が少ない場合や無い場合の文字コードを判定してみたので、そのサンプルプログラムを共有する。

前提条件

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

CSVファイルの内容をDBに書き込む前にファイルの文字コードを判定してみたバッチ処理でCSVファイルの内容をDBに書き込む際、ファイルの文字コードをチェックしたい場合があるが、その際に、文字コードを判定するライ...

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

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

文字列のユーティリティクラスは以下の通りで、getCharsetNameというメソッド内で、juniversalchardetというライブラリで判定された文字コードをログ出力する処理を追加している。



DemoBatchService.javaの内容は以下の通りで、CSVファイルを読み込む際の文字コードが「WINDOWS-1252」の場合は、DBに書き込まないよう処理を修正している。

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



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

1) 取り込むCSVファイルの日本後が少量の場合の、CSVファイル・ログ・取り込み後のDBの内容は以下の通りで、juniversalchardetというライブラリで文字コードが「WINDOWS-1252」と判断され、DBにデータが書き込まれないことが確認できる。
取り込みCSVファイル_日本語少量

サンプルプログラムの実行結果_ログ_日本語少量 サンプルプログラムの実行結果_DB_日本語少量

2) 取り込むCSVファイルに日本後を含まないの場合の、CSVファイル・ログ・取り込み後のDBの内容は以下の通りで、juniversalchardetというライブラリで文字コードがnullと判断されるため、デフォルトの「UTF-8」としてDBに書き込まれることが確認できる。
取り込みCSVファイル_日本語なし

サンプルプログラムの実行結果_ログ_日本語なし サンプルプログラムの実行結果_DB_日本語なし

要点まとめ

  • juniversalchardetというMozillaによって提供されているライブラリを利用してファイルの文字コードを判定すると、ファイルに含まれる日本語が少ない場合は「WINDOWS-1252」が、ファイルに含まれる日本語が無い場合は「null」が返却される。