事象
- Java21でプログラムを動かした際にIntelliJのコンソールに出力した文字が文字化けする
- IntelliJのコンソール(デフォルトはWindows Powershell)に限らず、コマンドプロンプトやGit Bashでも同様の事象が発生する
- Java17以前ではこの事象は発生しない
- 同じプログラムをLinux環境で実行した際には、この事象は発生しない
実施環境
- OS Windows11
- Java Amazon Corretto 21
- IDE IntelliJ 2024.1 Community Edition(無料版)
- プロダクトフレームワーク SpringBoot 3.2.4
- プログラムのファイルエンコーディング UTF-8
結論
- 以下解決手順の通りVM引数を追加することで文字化け解消した
解決手順
- IntelliJのヘルプ>カスタムVM引数オプションの編集をクリック
- ファイル
idea64.exe.vmoptions
が開くので、以下の1行を追加-Dfile.encoding=COMPAT
原因
- Java18で加わった変更「JEP 400: UTF-8 by Default」の影響により、文字セットの指定をせずにファイルへの入出力を行うと、デフォルトではUTF-8で入出力されるようになり、文字コードがWindows-31であるWindows環境では文字化けが発生するようになった
他に試したこと
以下は解決手順にたどり着くまでに試したが効果がなかったこと
- カスタムVMオプションに以下の引数を追加する
-Dfile.encoding=UTF-8
- 以下のVM引数をシステム環境変数を指定
- 変数名:
JAVA_TOOL_OPTIONS
- 値:
-Dfile.encoding=UTF-8
- 変数名:
- CHCP コマンドを使用するとコマンドプロンプトで使用される文字コードを設定