Javaで作成したコンソールアプリケーションをWindowsのコマンドプロンプトもしくはPowe Shellで実行すると、日本語の文字出力が文字化けする場合があります。文字化けの原因と対処法について紹介します.
目次
原因
JavaのソースコードとWindowsのコマンドプロンプト、Power Shellの文字コードに差異があるためです。
- JavaのソースコードがUTF-8で書かれている
- Windowsのコマンドプロンプト、Power Shellのターミナルは文字コードがSJISになっている。
対処法
対処法としては、両方の文字コードを一致させることで問題は解決します。
- 対処法1 Javaのプログラムのコンパイルと入出力の文字コードをSJISに変更する
- 対処法2 Windowsのコマンドプロンプト、Power Shellの文字コードをUTF-8に変更する
文字コードの確認
Javaプログラムの文字コードの確認
Mavenのpom.xmlには以下のように記述があります。JavaのプログラムはUTF-8でコンパイルするようにエンコード指定されています。
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
Windowsターミナルの文字コードの確認
ターミナルで以下のコマンドを実行します。932はSJISです。
> chcp
現在のコード ページ: 932
【対処法2】Windowsのコマンドプロンプトの文字コードを変更する
本ページではJavaのプログラムはUTF-8のままとし、Windowsのコマンドプロンプトの文字コードを変更するする対処法を紹介します。
以下のコマンドで文字コードをUTF-8に変更出来ます。65001はUTF-8の文字コードです。
> chcp 65001
Active code page: 65001
なお、Power Shellで同様に文字コードを変更しても文字化けが解消されませんでした。JavaとPowe Shellの相性の問題な気がします。
WindowsのPower ShellでJavaのコンソールプログラムを実行する機会も多くはないこと、コマンドプロンプトで代用出来ることからPower Shellでの文字化けは諦めます。