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つ不足している可能性があります。コンソールで正しくハードコードされた中国語が出力されることに注意してください。
この問題上の任意の支援/指導は大歓迎です:)
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
私はここではむしろ頭がおかしくなるかもしれないことを恐れています。私は質問を編集しようとしています。出力ライターを使って値を出力する(この時点では、Stringとして保存されています) 。 – kwah
これ以上追加する予定はありますか?多分私はそれがIDEの問題であるかどうかを見るためにEclipseで尋ねるべきです。 – kwah