【发布时间】:2015-03-07 16:13:33
【问题描述】:
我需要读取用户的输入,并且我希望支持非拉丁字母,例如 Å、Ä 和 Ö。
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());
当我运行此代码并输入一个拉丁字母时,它会按预期工作(我输入了一些内容,按 Enter 键,它会打印出我输入的内容)。但是如果我尝试使用 å 我会得到这个:
å
�
Read with charset: UTF-8
如果文本以非拉丁字母结尾,我必须按两次 Enter,然后它就不能正确显示它们。我已经在 Netbeans 的控制台和 Windows 命令提示符中尝试过,但都没有给出预期的结果。
我找不到使用 UTF-8 的解决方案,而是使用了 ISO-8859-1。当我第一次运行 chcp 28591 时,它与我的 Netbeans 控制台(绝对应该是 UTF-8)和 CMD 一起工作,更改了字体(在我的情况下这是必要的)并运行我的程序。
【问题讨论】:
-
它对我有用。您的控制台必须设置为不能正确显示 UTF-8。
-
@RealSkeptic,我可以打印出非拉丁字符,没问题(Sys.out.print("å"))。这在 Netbeans 控制台和 CMD 中都可以正常工作。但是,当我尝试阅读字符时,就会出现问题(当文本以 å ä 或 ö 结尾时,必须按两次 Enter)。
-
尝试从 System.in 中读取 bytes 并打印它们。这可以告诉您控制台设置的字符集。
-
@RealSkeptic: Z = 90, Å = 197。但我认为 BufferedReader 的底层阅读器(?)使用默认字符集(如上所示,对我来说是 UTF-8) .
标签: java