java - 以 UTF-8 格式从键盘读取

标签 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。当我第一次运行 chcp 28591 时,它与我的 Netbeans 控制台(绝对应该是 UTF-8)和 CMD 一起工作,更改字体(在我的情况下这是必要的)并运行我的程序。

最佳答案

代码示例没有以任何方式正确编码。它使用系统默认值从控制台读取数据,然后使用 UTF-8 将其写出。您的系统默认值可能不是 UTF-8,更复杂的是,您的控制台可能与系统默认值相同也可能不同。

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

关于java - 以 UTF-8 格式从键盘读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28916928/

相关文章:

java - 在 JSP 页面上打印控制台输出

java - 求树的最大深度

java - 与 python psycopg2 相比,使用 clojure jdbc 将文件记录插入 postgres db 需要很长时间

java - Vert.x 失败到 "Run your module and see your changes immediately"

java - java中的可变字节数组

java - Java 代码是保存在本地编译的类数据共享存档 (classes.jsa) 中还是字节码?

java - 我们如何优化 CPU 密集型 Java 应用程序?

java - 访问plsql函数时出错: invalid name pattern

java - 如何在控制台或文件中记录 spring 数据生成的 solr 查询

java - java中如何从浏览器获取地理位置