2012-12-14 22 views
8

Eclipseに漢字を正しく読み込ませるのに苦労しています。どこが間違っているのかわかりません。Javaコンソールで漢字が正しく表示されない

具体的には、コンソールから中国語(簡体字または繁体字)の文字列を読み込んで出力する間に、文字化けします。 混在したテキスト(英語/中国語)の大きな文字列を出力する場合でも、中国語文字の外観を変更するようにしか見えません。

私は次のテストの例に分けて、各段階で何が起きているかを明示的に注記しました。私は学生であり、私の理解を確認したいと思うことに注意してください:)

public static void main(String[] args) {  
    try 
    { 
     boolean isRunning = true; 

     //Raw flow of input data from the console 
     InputStream inputStream = System.in; 
     //Allows you to read the stream, using either the default character encoding, else the specified encoding; 
     InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8"); 
     //Adds functionality for converting the stream being read in, into Strings(?) 
     BufferedReader input_BufferedReader = new BufferedReader(inputStreamReader); 


     //Raw flow of outputdata to the console 
     OutputStream outputStream = System.out; 
     //Write a stream, from a given bit of text 
     OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream, "UTF-8"); 
     //Adds functionality to the base ability to write to a stream 
     BufferedWriter output_BufferedWriter = new BufferedWriter(outputStreamWriter); 



     while(isRunning) { 
      System.out.println();//force extra newline 
      System.out.print("> "); 

      //To read in a line of text (as a String): 
      String userInput_asString = input_BufferedReader.readLine(); 

      //To output a line of text: 
      String outputToUser_fromString_englishFromCode = "foo"; //outputs correctly 
      output_BufferedWriter.write(outputToUser_fromString_englishFromCode); 
      output_BufferedWriter.flush(); 

      System.out.println();//force extra newline 

      String outputToUser_fromString_ChineseFromCode = "之謂甚"; //outputs correctly 
      output_BufferedWriter.write(outputToUser_fromString_ChineseFromCode); 
      output_BufferedWriter.flush(); 

      System.out.println();//force extra newline 

      String outputToUser_fromString_userSupplied = userInput_asString; //outputs correctly when given English text, garbled when given Chinese text 
      output_BufferedWriter.write(outputToUser_fromString_userSupplied); 
      output_BufferedWriter.flush(); 

      System.out.println();//force extra newline 

     } 
    } 
    catch (Exception e) { 
     // TODO: handle exception 
    } 
} 

出力例:このスタックオーバーフローポストの上に見られるもの

> 之謂甚 
foo 
之謂甚 
之謂甚 

> oaea 
foo 
之謂甚 
oaea 

> mixed input - English: fubar; Chinese: 之謂甚; 
foo 
之謂甚 
mixed input - English: fubar; Chinese: 之謂甚; 

> 

が正確に一致するものを私はEclipseのコンソールに表示し、どのようなEclipseのデバッガの中に見られている(見たときに/変数の値を編集) 。 Eclipseデバッガを使用して変数値を手動で変更すると、その値に応じたコードが正常に動作するようになり、テキストの読み取り方法はINであることが示唆されます。

私は、特に体系的に行われておらず、簡単に何かを逃してしまったかもしれないが、明示的な文字タイプの有無にかかわらず、読み込みと出力を行うスキャナ/バッファリングされたストリーム[reader | writer]

可能な限り、私はEclipse環境をUTF-8を使用するように設定しようとしましたが、場所が2つ不足している可能性があります。コンソールで正しくハードコードされた中国語が出力されることに注意してください。

この問題上の任意の支援/指導は大歓迎です:)

+0

System.outはバイト単位で動作する['PrintStream'](http://docs.oracle.com/javase/6/docs/api/java/io/PrintStream.html)です。 [PrintWriter'](http://docs.oracle.com/javase/6/docs/api/java/io/PrintWriter.html)または['OutputStreamWriter'](http: /docs.oracle.com/javase/6/docs/api/java/io/OutputStreamWriter.html)を使用して文字として出力すると、userInputが正しく出力されません。 – Powerlord

+0

私はここではむしろ頭がおかしくなるかもしれないことを恐れています。私は質問を編集しようとしています。出力ライターを使って値を出力する(この時点では、Stringとして保存されています) 。 – kwah

+0

これ以上追加する予定はありますか?多分私はそれがIDEの問題であるかどうかを見るためにEclipseで尋ねるべきです。 – kwah

答えて

2

コンソールが入力を正しく読み取っていないようです。あなたの問題とワークラウンドについて私が思うと思うリンクがあります。

http://paranoid-engineering.blogspot.com/2008/05/getting-unicode-output-in-eclipse.html

単純な答え: あなたたeclipse.iniに環境変数の-Dfile.encoding = UTF-8を設定してみてください。 リンクは、より多くの提案

+0

@kwahあなたはこの提案を試しましたか? – Zenil

+1

'-Dfile.encoding = UTF-8'を' eclipse.ini'に追加する初期テストが動作するように見えることが確認できます! :)最初のテストよりも徹底的にテストするチャンスがあったとき、私は1日か2日で正解とマークします。 – kwah

+0

非Unicode入力を認識するためにEclipseに環境変数が必要な理由がありますか? – kwah

1

このお試しください:右あなたのメインクラスをクリックして、>実行コンフィギュレーションとして実行]をクリックし、Eclipseで を。次に、共通のタブに移動し、エンコードをUTF-8に変更します。それはうまくいくはずです!

+0

あなたはこの提案を試しましたか?それはすでにUTF-8でした。 – kwah

0

を持っている(日食の全体のためにこれを有効にする前に、あなたはこのプログラムのデバッグconfigurtionでこれを設定してみてください、それが動作するかどうかを確認できます)

これは、エンコーディングの問題のようです。 1.コンパイラがASCII文字以外の文字を読み取る機能を有効にしていない場合は、UTF-8文字を読み取る必要があります。 2.特定の言語パックを削除した可能性がありますか?あなたはおそらく漢字を書くことができるのでこれはほとんどありませんか?

IDEを使用して非ASCII文字を正しくコンパイルする方法を学びましょう。 Pythonではこれがコード自体で行われていますが、Javaでどのように行われているのかは分かりません。

関連する問題