IntelliJで日本語が文字化けしたときに確認したい3つの項目

## はじめに
Javaの勉強を始め、はじめてIntelliJを触りました。
ただ、自分の環境ではコンソール画面で日本語の文字化けが発生してしまい、解消に時間がかかってしまったので、解消した方法を記録しておきます。

### 環境
- Windows11
- IntelliJ IDEA 2024.2.4 (Community Edition)
- Oracle OpenJDK 21.0.5 


## 問題
- コンソール画面で日本語が文字化けする
```java
// ソースコード
package org.example;
public class Main {
    public static void main (String[] args) {
        System.out.println("こんにちは!");
    }
}
```
```bash
// 実行結果
9:18:07:  ':org.example.Main.main()' を実行中...

> Task :compileJava
> Task :processResources NO-SOURCE
> Task :classes

> Task :org.example.Main.main()
����ɂ���!   // ここで文字化けしてる

BUILD SUCCESSFUL in 816ms
2 actionable tasks: 2 executed
9:18:08:  ':org.example.Main.main()' の実行を完了しました。
```

## 調査
- Windows環境でIntelliJを動かすとよく出るエラーのようです
- IntelliJ IDEA 2022.2.1（2022年8月リリース）で修正された、という情報もありましたが、現時点でも少なくとも自分の環境では発生しました
- 

## 解決方法
- 注意点
    - 環境にかなり依存するようなので、以下の一つだけでは解消しない可能性もあります
    - 自分の場合は複数または全て実行してようやく解消したケースもありました
    - 下記すべてを実行しても解消しない場合もあるかもしれません…

### 1.カスタムVMオプションを編集する
- 手順
    - 文字セットの指定を行う
        - メニューアイコン＞ヘルプ＞「カスタムVMオプションの編集」
        - `idea64.exe.vmoptions`が開く
            ```bash
            // 初期値
            -Xmx2048m
            -Dide.managed.by.toolbox=C:\Users\bellt\AppData\Local\JetBrains\Toolbox\bin\jetbrains-toolbox.exe
            -Dtoolbox.notification.token=0a1ff6c6-302c-4c1c-bd4a-f890b37adb8c
            -Dtoolbox.notification.portFile=C:\Users\bellt\AppData\Local\JetBrains\Toolbox\cache\ports\95b5038d-8390-49a0-af4a-8805a17452be.port
            ```
            
        - 以下の一行を追加
            - `Dfile.encoding=COMPAT`
            
            ```bash
            // 追加後
            -Xmx2048m
            -Dide.managed.by.toolbox=C:\Users\bellt\AppData\Local\JetBrains\Toolbox\bin\jetbrains-toolbox.exe
            -Dtoolbox.notification.token=0a1ff6c6-302c-4c1c-bd4a-f890b37adb8c
            -Dtoolbox.notification.portFile=C:\Users\bellt\AppData\Local\JetBrains\Toolbox\cache\ports\95b5038d-8390-49a0-af4a-8805a17452be.port
            -Dfile.encoding=COMPAT
            ```
            
    - 再起動しないと設定を読み込まなたかったので、一旦IntelliJを閉じて再度起動
    - 文字化けが解消される
- 注意点
    - これで解消しても、ふとした瞬間にまた文字化けが発生することがあります
    - また特定のプロジェクトではこれで解消しても、新しいプロジェクトを作ると再度文字化けが発生し、この方法では直らないこともありました

### 2.Windowsの言語設定でUnicode UTF-8を有効にする
- 手順
    - 設定画面を開く
        - Windowsキー + I
    - "時刻と言語"を選択
    - "言語と地域"を選択
    - "管理用の言語の設定"を選択
    - "システムロケールの変更"を選択
    - "ベータ: ワールドワイド言語サポートでUnicode UTF-8を使用"にチェックを入れる

- 注意点
    - 環境によっては既存のテキストファイルで文字化けが発生するケースも有るようです
    - その場合は他の方法を先に試してみてもよいかもしれません

### 3.プロジェクトのビルド設定を変更する
- 手順
    - IntelliJで設定画面を開く
        - ctrl + alt + s
    - 左側のメニューから"ビルド、実行、デプロイ"を選択
    - "ビルドツール"を選択
    - "Gradle"を選択
    - Gradle JVMを`21 Oracle OpenJDK 21.0.5`に変更
        - これはご自身がインストールしたJVMを選択できれば良いと思います
        - `プロジェクトSDK`だと文字化けの原因になることがありました

- 注意点
    - プロジェクト開始時のビルドシステムをGradleに設定した場合に限るようです
    - 自身の環境では再現できませんでしたが、以下のように変更することで文字化けが直ることも有るようです
        - ビルド及び実行に使用　を`IntelliJ IDEA`に変更
    
## おわりに
同じように初学者でいきなり環境構築に方のご参考になると幸いです。

## 参考
- [IDE 2022.1 でWindows+JDK18の実行時にコンソールで日本語が文字化けする
](https://support.samuraism.com/jetbrains/trouble-shooting/windows_jdk18_garbled)
- [Java21（18以上）×IntelliJ×Windows×UTF-8の環境下でコンソール出力結果が文字化けする
](https://qiita.com/sakuranokuni-master/items/79abc120d0e026e6e5d8)