我需要阅读用户的输入,我想支持非拉丁字母,例如Å,Ä和Ö。
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
时,更改了字体(在我的情况下这是必要的)并运行我的程序。
答案 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")