質問: Java初心者です 以下のような簡単なプログラムをうってcygwinでコンパイルしました ``` public class Hensuu{ public static void main(String[] args){ int x; x=4; System.out.println(x); } } ``` これをHensuu.javaというファイルで保存し、cygwinでコンパイルしたところ 以下のように文字化けが起こってしまいます ![cygwinの状態](https://teratail-v2.storage.googleapis.com/uploads/contributed_images/1a9d14aa05de0339d7db4e8f509d9d65.png) 最初はエンコードの問題かと思い、javac -encoding utf-8 Hensuu.java としてみる等しましたが 一向に解決しません どなたかご教授願います 環境はOSがwindows10 エディターはVisual Studio 2015 Code コンパイラはCygwin (どちらもエンコードはutf-8で設定しています)
回答: javaはOracleJDKですかね。 そのつもりで返答します。 javaに限らず、Windowsのネイティブなコンソールプログラムはコマンドプロンプトを前提に作られているので、(日本語の)文字コードは基本的にcp932(ShiftJIS)で出力されます。それに対して、cygwinは全体的に文字コードをUTF-8で扱うようになっているので、どうしても文字化けが起きます。 ですので、cp932からutf-8に変換して出力します。 ``` javac Hensuu.java 2>&1 | iconv -f cp932 -t utf-8 ``` これで文字化けなく出力されると思います。 自分は、$HOME/.bashrcに以下の記述をして、「wincmd」コマンドを作っています。 ``` function wincmd() { $* 2>&1 | iconv -f cp932 -t utf-8 } ``` そして、Windowsのコンソールプログラムを実行する際には、wincmdを使います。 ``` wincmd javac Hensuu.java ``` このようにしておくと、他のプログラムでも使えるので、便利です。