我需要从用户那里读取输入,并且我希望支持非拉丁字母,例如Å、Ä和Ö。
当我运行这段代码并输入拉丁字母时,它按预期工作(我输入一些内容,按回车键,然后它打印出我输入的内容)。但是如果我尝试使用å,就会得到以下结果:
BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out, "UTF-8"), true);
out.println(keyboard.readLine());
out.println("Read with charset: " + Charset.defaultCharset().name());
当我运行这段代码并输入拉丁字母时,它按预期工作(我输入一些内容,按回车键,然后它打印出我输入的内容)。但是如果我尝试使用å,就会得到以下结果:
å
�
Read with charset: UTF-8
如果文本以非拉丁字母结尾,我必须按两次回车键,然后它无法正确显示。我已经在Netbeans的控制台和Windows命令提示符中尝试过,但都没有得到预期的结果。
我无法找到UTF-8的解决方案,但改用ISO-8859-1。它能在我的Netbeans控制台(应该是UTF-8)和CMD上正常工作,只需首先运行chcp 28591
,更改字体(在我的情况下是必要的),然后运行程序。
new InputStreamReader(System.in, Charsets.ISO_8859_1)
替换您现在拥有的内容,我相信字符将被适当地读取(虽然我不确定它将如何打印出来,但您可以在调试器中检查它)。 - RealSkeptic