皆様こんにちは。
Javaを勉強し始めの方は、初めてのアウトプットとしてまず1コマンドラインアプリを制作することが多いのではないでしょうか。
先日Javaで作ったプログラムを初めてコマンドプロンプトで実行した所、一部が文字化けしてしまったのですが、一先ずは解決できたためその時のことを書いていきたいと思います。
Javaプログラムを作ってみる
まず前提として、私はEclipseという2IDEを用いて開発しています。
Java開発においてはポピュラーな環境なので使われている方も多いのではないでしょうか。
Visual Studio Code等他のコードエディタで開発している場合は状況が異なるかもしれませんのでその点ご了承ください。
さて、では名前を入力すると挨拶を返してくれる簡単なプログラムを作ってみます。
下記のようにコーディングします。
public class Main {
public static void main(String[] args) {
System.out.println("あなたの名前を教えてください");
String name = new java.util.Scanner(System.in).nextLine();
System.out.println("こんにちは!" + name + "さん!");
}
}
次にこのプログラムをEclipse上のコンソールとWindowsのコマンドプロンプトそれぞれで実行してみます。
このようにEclipseのコンソールでは入力した名前が問題なく表示されましたが、コマンドプロンプトでは文字化けで表示されてしまいます。
どうすれば解決できるでしょうか?
標準入力(System.in)の文字コードを明示的に指定する
ネットで調べてみたところ、Javaのデフォルト文字コードとコマンドプロンプトの文字コードが異なっていることが原因のようです。
Javaのデフォルト文字コードとコマンドプロンプトの文字コードはそれぞれ、
Java:Unicode(UTF-16)
コマンドプロンプト:Shift_JIS
となっています。
そのためJavaに入力(System.in)する際、文字コードがShift_JISであることを明示的に指定すれば解決できそうです。
下記のようにコードを修正します。
public class Main {
public static void main(String[] args) {
System.out.println("あなたの名前を教えてください");
//System.inの後に「, "Shift-JIS"」を追記
String name = new java.util.Scanner(System.in, "Shift-JIS").nextLine();
System.out.println("こんにちは!" + name + "さん!");
}
}
では、改めてコマンドプロンプトで実行してみましょう。
文字化けせずに表示させることができました。
まとめ
いかがだったでしょうか。
こういった文字化けへの対処方法は色々とあるようですが、今回はコードに追記することで解決することができました。
ただし、開発環境と実行環境の違い等に対する理解が私自身まだ乏しく、根本的な解決のためにはより学習を深めていく必要があると実感しました。
今回はここで終わりになりますが、少しでも皆様の参考になれば幸いです。
参考
- javaのScannerクラスでString入力を実装した場合、abcなどの英数字はコマンドプロンプト上で入出力できますが、日本語では入力はできても出力されません。
- 【2022年最新】Java開発がはかどる!おすすめのIDE(統合開発環境)5選