在UTF-8中从键盘读取

时间:2015-03-07 16:13:34

标签: java

我需要阅读用户的输入,我想支持非拉丁字母,例如Å,Ä和Ö。

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时,更改了字体(在我的情况下这是必要的)并运行我的程序。

2 个答案:

答案 0 :(得分:1)

代码示例无法以任何方式正确编码。它使用系统默认值从控制台读取数据,然后使用UTF-8将其写出。您的系统默认值可能不是UTF-8,并且为了使事情复杂化,您的控制台可能与您的系统默认值相同或不同。

要在控制台中正确执行此操作,您需要使用控制台编码读取,并使用控制台编码写出。例如,如果您只是测试它并需要写出文件,请将其写为UTF-8,并确保使用文本编辑器将其打开为UTF-8。

答案 1 :(得分:0)

你试过了吗?

BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in,"UTF-8"));

如果这不起作用,请尝试读取原始字节流,然后转换为new String(bytes,"UTF-8")