はじめに
2022/9に、Salesforceヘルプ:Zulu 18 以降をインストールすると、Windows 版のデータローダで文字化けが発生というヘルプが公開されました。
これはShift-JISのCSVファイルを使用すると文字化けが発生する、というもので、Java18以降のバージョンにて文字セットの指定がない場合、UTF-8をデフォルトの文字セットとして扱うという動作変更が原因です。
Java全体ではこの動作変更により「動作環境によってデフォルトの文字コードがバラバラな状態から固定できる」というメリットがあるようですが、DataLoaderでは起動時に文字セットの指定を行っていないため、Java18以降の環境ではDataLoaderはUTF-8以外は扱えない動作となりました。
現在、DataLoaderの動作環境はJava11以降となっているため、引き続きShift-JISのCSVを使用したい場合はJava11を使用する、というのがSFDCの見解のようですが、Java18以降でもこれまで通りDataLoaderを動作させる方法はないのか調査したところ、 -Dfile.encoding=COMPAT
というオプションを付与することでこれまでと同様の動作にできるとのことでした。
ここではDataLoaderで -Dfile.encoding=COMPAT
を使う方法と動作確認結果を書いていきます。
オプション付与の方法
環境変数を追加する
Java実行時にオプションを追加するための環境変数として JAVA_TOOL_OPTIONS
があります。
この環境変数を使用して、DataLoader起動時に -Dfile.encoding=COMPAT
オプションを追加します。
具体的にはコントロールパネル→システム→システムの詳細設定→環境変数の順にアクセスし、システム環境変数に以下の形で追加します。
追加した後にDataLoaderを起動すると、コマンドプロンプト(背景が黒い画面)に以下のようにオプションが設定されたことを表す文言が表示されます。
環境変数が追加できない、同じPCでJavaでの開発を行うので影響されたくないなどの理由がなければこちらの利用をお勧めします。
DataLoader起動用batファイルに記載する
DataLoaderとJavaを別にインストールするようになってから、DataLoaderインストールフォルダには dataloader.bat
というDataLoader起動用ファイルが存在します。
そのファイルの中にある、 java
から始まる行に -Dfile.encoding=COMPAT
オプションを以下のように直接書き込みます。
こちらの場合、書き換える場所が分かりにくい*1、DataLoaderの新しいバージョンをインストールするごとに書き換えないといけないという問題があるため、環境変数追加の対応が難しい方のみ行うのがよいかなと思います。
動作確認
ここでは、 -Dfile.encoding=COMPAT
オプション有無による動作の違いを確認します。
環境
- OS: Windows11
- Java: Zulu OpenJDK バージョン 19.0.1
- DataLoader: バージョン 56.0.6
動作結果
Export
DataLoaderのオプション、 -Dfile.encoding=COMPAT
オプションの有無とExportで出力される文字コードの一覧です。
DataLoaderオプション | Javaオプションなし | 環境変数追加 | dataloader.bat編集 |
---|---|---|---|
Write all CSVs with UTF-8 encoding 有効 | UTF-8 | UTF-8 | UTF-8 |
Write all CSVs with UTF-8 encoding 無効 | UTF-8 | Shift-JIS | Shift-JIS |
Insert
〇はインポート後のSalesforce側の文字が正常なこと、×は文字化けしたことを表します。
- CSVにShift-JISを使用
DataLoaderオプション | Javaオプションなし | 環境変数追加 | dataloader.bat編集 |
---|---|---|---|
Read all CSVs with UTF-8 encoding 有効 | × | × | × |
Read all CSVs with UTF-8 encoding 無効 | × | 〇 | 〇 |
- CSVにUTF-8を使用
DataLoaderオプション | Javaオプションなし | 環境変数追加 | dataloader.bat編集 |
---|---|---|---|
Read all CSVs with UTF-8 encoding 有効 | 〇 | 〇 | 〇 |
Read all CSVs with UTF-8 encoding 無効 | 〇 | × | × |
まとめ
動作結果から、以下が分かりました。
- Java18以降でJavaオプション
-Dfile.encoding=COMPAT
がない場合、"Read/Write all CSVs with UTF-8 encoding"オプションは意味をなさず、全てUTF-8で処理される - Javaオプション
-Dfile.encoding=COMPAT
を追加してDataLoaderを起動した場合、これまで通り"Read/Write all CSVs with UTF-8 encoding"オプションにチェックがなければShift-JIS、あればUTF-8で処理される
現状、このような面倒なことを考えずに済むJava11の利用をお勧めしますが、どうしてもJava18以降を使用しないといけないなどの事情がある場合は本投稿を参考にしていただければ幸いです。
参考資料
*1:DataLoader Ver53のdataloader.batのコードは上記キャプチャと異なりました