TimerTrigger

CSVファイルの内容をDBに書き込むバッチ処理内で様々な漢字文字を取り込んでみた

日本語の文字集合としてJIS(日本産業規格)で定めた規格として「JISX0213」があり、この中に「第1水準漢字」「第2水準漢字」「第3水準漢字」「第4水準漢字」等が含まれる。

今回は、「JISX0213」に含まれる「第1水準漢字」「第2水準漢字」「第3水準漢字」「第4水準漢字」と、「IBM拡張漢字」を含むCSVファイルの内容をDBに書き込んでみたときに、文字化けしないかどうか調査してみたので、共有する。

なお、「JISX0213」や「第1水準漢字」「第2水準漢字」「第3水準漢字」「第4水準漢字」については、以下のサイトを参照のこと。
http://www.shuiren.org/chuden/teach/code/main4.htm

http://www.shuiren.org/chuden/teach/code/main5.htm

また、「IBM拡張漢字」については、以下のサイトを参照のこと。
https://ja.wikipedia.org/wiki/IBM%E6%8B%A1%E5%BC%B5%E6%96%87%E5%AD%97

前提条件

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

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



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

前提条件の記事のサンプルプログラムを、CSVファイルを読み込む際の文字コードを変更できるよう修正する。なお、下記の赤枠は、前提条件のプログラムから変更したプログラムである。
サンプルプログラムの構成

DemoBatchService.javaの変更内容は以下の通りで、CSVファイルを読み込む際の文字コードを変更できるようにしている。

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



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

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

1) 取り込むCSVファイルの内容を以下の通りとする。なお、このファイルは、文字コードがUTF-8で、「第1水準漢字」「第2水準漢字」「第3水準漢字」「第4水準漢字」「IBM拡張漢字」を全て含んでいる。
CSVファイル(UTF-8)

なお、上記ファイルの「第1水準漢字」「第2水準漢字」「第3水準漢字」「第4水準漢字」「IBM拡張漢字」は、以下のサイトから抜粋したものとなる。
●第1水準漢字
http://www13.plala.or.jp/bigdata/jis_1.html

●第2水準漢字
http://www13.plala.or.jp/bigdata/jis_2.html

●第3水準漢字
http://www13.plala.or.jp/bigdata/jis_3.html

●第4水準漢字
http://www13.plala.or.jp/bigdata/jis_4.html

●IBM拡張漢字
http://www13.plala.or.jp/bigdata/kanji_2.html

2) DemoBatchService.javaを以下のように修正し、文字コード=UTF-8で、1)のファイルを取り込むものとする。なお、下図ではimport文の多くを省略している。
ソースコード(UTF-8選択)

3) 1)のファイルをDBに取り込んだ結果は以下の通りで、文字化けしていないことが確認できる。
DB出力結果(UTF-8)

4) 取り込むCSVファイルの内容を以下の通りとする。なお、このファイルは、文字コードがShift_JISで、「第1水準漢字」「第2水準漢字」「第3水準漢字」「第4水準漢字」「IBM拡張漢字」を全て含んでいる。
CSVファイル(Shift_JIS)

5) DemoBatchService.javaを以下のように修正し、文字コード=Shift_JISで、4)のファイルを取り込むものとする。なお、下図ではimport文の多くを省略している。
ソースコード(Shift_JIS選択)

6) 4)のファイルをDBに取り込んだ結果は、以下の通りで、「第3水準漢字」「第4水準漢字」「IBM拡張漢字」が文字化けしていることが確認できる。
DB出力結果(Shift_JIS)

7) DemoBatchService.javaを以下のように修正し、文字コード=MS932で、4)のファイルを取り込むものとする。なお、下図ではimport文の多くを省略している。
ソースコード(MS932選択)

8) 4)のファイルをDBに取り込んだ結果は、以下の通りで、「第3水準漢字」「第4水準漢字」「IBM拡張漢字」の文字化けが解消されていることが確認できる。
DB出力結果(MS932)

これは、MS932がShift_JIS を拡張した文字コードであるためである。詳細は以下のサイトを参照のこと。
https://weblabo.oscasierra.net/shift_jis-windows31j/

要点まとめ

  • 漢字データを正しく取り込むには、CSVファイルがUTF-8の場合は「UTF-8」を、CSVファイルがShift_JISの場合は「MS932」を、指定する必要がある。