###困っていること
以下のコードを用いた時に、文字コードが65001から変更されず、日本語が文字化けしてしまう
Java
1import java.io.IOException; 2import java.util.Scanner; 3 4public class Main { 5 public static void main(String[] args) { 6 ProcessBuilder pb0 = new ProcessBuilder("cmd", "chcp", "932"); 7 try { 8 Process p = pb0.start(); 9 //これが文字化け 10 System.out.println("あああ"); 11 new Scanner(System.in).next(); 12 //これは正常に表示される 13 System.out.println("hi"); 14 p.onExit(); 15 } catch (IOException e) { 16 e.printStackTrace(); 17 } 18 } 19}
###プログラムの完成系のイメージ
上記のソースコードからjarファイルを作成
↓
exewarpを使用してexeにする
↓
そのexeファイルをダブルクリックして起動したときに文字コードが932に変更され、日本語を表示できるようにする。
###試したこと
jarファイルまたはexeファイルをcmd上から文字コードを932に変更してから起動→日本語は文字化けしない
ProcessBuilderのコマンドを入れ替えたり、付け足したりしてみる
new ProcessBuilder("cmd", "chcp", "932"); → 文字コード変更できず、文字化け
new ProcessBuilder("cmd", "start", "chcp", "932"); → 文字コード変更できず、文字化け
new ProcessBuilder("chcp", "932", "cmd"); → エラーが出て強制終了(知ってた...)
new ProcessBuilder("cmd", "chcp", "932", "cmd"); → 文字コード変更できず、文字化け
###環境
OS:Windows10
開発環境: IntelliJ IDEA 2020.3(jarもこれで自動生成されるやつを使用)
jarからexeへの変換:exewrap 1.6.4
java version:java 11.0.9
###補足
exeに変換しないで直接jarをダウるクリックすると一瞬cmdの黒い画面が表示されるが、すぐに消えてしまうため動かない。(java.exeを使用)
exeに変換するとcmdの黒い画面が表示され、日本語は文字化けしているが「あああ」や入力、「hi」を確認できる
###補足2
Javaソースコードの文字コードは「UTF-8」です
IntelliJに頼らず、cmdからコンパイルをするときは
cmd
1javac -encoding UTF-8 Main.java 2jar cfm Main.jar Main Main.class
でうまくいきます。
###補足3
ソースコードに
Java
1System.out.println(System.getProperty("file.encoding"));
を追加して確認したところ、exeファイルから起動される画面の文字コードは「MS932」であることがわかりました。
そのためIntelliJの文字コードの設定を「windows-31j」に変更して再度ビルドしましたがやはり日本語は文字化けしたままでした。