2017-01-30 9 views
1

これがプログラミングの問題かどうかは不明です。私はそれを疑うようになりました...しかし、その後、問題のJavaプログラム(実行可能なjar)をCygwinの代わりにWindowsコンソールで実行しました。うまく動いていました。したがって、以下はCygwinコンソールにのみ適用されます。Cygwinのエンコードが難しい

フランス語のテキストを処理しています。アクセント付きの文字が印刷されると(System.out)、代わりに「ハッシュボックス」の一種が印刷されます。私はこれについてもう一つの質問を見ましたが、解決策や適切な説明はありませんでした。

アクセント付きの文字を入力すると、これらは正しく読み込まれません(Java System.in)。 "bénéfice"は "bénéfice"として(正しくエンコーディングを処理しているログに)出力されます。

困ったことは(おそらく)コンソールに「bénéfice」と入力できるということです。 Deja Vu Sans MonoはUnicodeをうまく処理することを目的としていますが、私は理解しています。だから...これは、JavaのSystem.inSystem.outのストリームと関係がありますか?

これは疑いの余地なく、Windowsプラットフォーム上のCygwinです(Windows以外のOSでCygwinを使用する人は誰ですか)。

私は "ロケール"と文字セットとフォントを、オプション - >テキストに変更しようとしました。これらのボックスは変更されません。
フォント:デジャヴなきモノ
ロケール:表すen_GB
文字セット:私は行くUTF-8

コマンドプロンプトで、

$ locale 
瞬間の設定で はデフォルトのものです

私は

LANG=en_GB.UTF-8 
LC_CTYPE="en_GB.UTF-8" 
LC_NUMERIC="en_GB.UTF-8" 
LC_TIME="en_GB.UTF-8" 
LC_COLLATE="en_GB.UTF-8" 
LC_MONETARY="en_GB.UTF-8" 
LC_MESSAGES="en_GB.UTF-8" 
LC_ALL= 

私は何をすべきか分かっていますか?

+0

CygwinはもちろんWindows用です。 Javaはcygwinアプリケーションではないため、cygwinのロケール設定を無視する可能性があります。 – matzeri

+0

ありがとうございます。だから実際には、バイトとエンコーディングと考えられる解決策の意味ではどういうことでしょうか? Javaに特定のエンコーディングでストリームを送信させる方法はありますか?私は、エンコーディングは常に私を完全に困惑させたと告白します。 –

+0

これはjavaインスタンスとcygwinコンソールで使用される文字セットの不一致の可能性が最も高いです。 java-instanceで使用されている文字エンコーディングをチェックする価値があります。 [この質問](http://stackoverflow.com/questions/2415597/java-how-to-detect-and-change-encoding-of-system-console)もこの問題を解決するのに役立つかもしれません。 – Paul

答えて

1

答えはPaulとZhong Yuです。この種のものを行うのCygwinから読み込むには

PrintStream out = new PrintStream(System.out, true, "UTF-8"); 
out.print(outputString); 

:この種のものを行うのCygwinに印刷する

この質問はCygwinを再前に来ていないことを

BufferedReader br = new BufferedReader(new InputStreamReader(System.in, "UTF-8")); 
String nextInputLine = br.readLine(); 

少しびっくり。

関連する問題