520 words
3 minutes
【備忘録】Javaで多言語出力 → UTF-8にしたらVScodeだけ文字化けした話

【備忘録】Javaで多言語出力 → UTF-8にしたらVScodeだけ文字化けした話#

「あれ?cmd.exeでは表示されるのに、VScodeだけ???になるんだが…」
こんにちは、YAMAです。
今回は Javaで日本語・英語・タイ語 を同時に表示させようとしたら、思わぬ“文字化けの罠”にはまった話を備忘録として残します。


💡 やりたかったこと#

Javaでいろんな言語を出力するサンプルを作ろうとして、次のようなコードを書いていました。

System.out.println("こんにちは");  // 日本語  
System.out.println("Hello");      // 英語  
System.out.println("สวัสดี");     // タイ語  

文字化け:VScodeだけおかしい?#

実行してみたところ…

  • 通常の cmd.exe → すべて問題なく表示
  • VScodeのターミナル → タイ語だけ「???」に化ける

「同じコードなのに、なぜ…?」と謎の沼に突入。

解決策:ProcessBuilderでchcp 65001を明示的に叩く!#

そこで見つけたのがこの方法:

ProcessBuilder pb = new ProcessBuilder("cmd", "/c", "chcp", "65001");
try {
    pb.inheritIO().start().waitFor(); // 標準出力に反映
} catch (Exception e) {
    e.printStackTrace();
}

System.out.println("こんにちは");
System.out.println("Hello");
System.out.println("สวัสดี");

これを入れて実行すると、VScodeでも文字化けせずに表示される!

つまり:

  • Java → UTF-8指定済
  • chcp 65001 を Java から直接呼び出す
  • cmdの文字コードを変えられるから VSCode でもちゃんと表示される!

最後に#

  • Javaで多言語を出力する場合、chcpの扱いに注意!
  • VScodeのターミナルは通常のcmdと違って動きが微妙
  • ProcessBuilderで直接 chcp を叩けば、回避可能

「文字化け」はいつも突然に。 解決の糸口は、案外 ProcessBuilder だったりする。

今回は意外な場所の文字化けでした。
IDE(総合開発環境)ではこういったことも起きるという新しい知見にはなりました。
この話を備忘録として残しておきます。
以上、YAMAでした。