我正努力让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,但我想我可能错过了一两个地方。请注意,控制台将正确输出硬编码的中文字符。
在这个问题上的任何援助/指导,非常感谢:)
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
还有什么想法添加到此?也许我应该在Eclipse上问一下,看看它是否是IDE问题..? – kwah