天使と一緒に行く旅路
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でした。