使用UTF-8扫描输入

时间:2016-06-21 09:44:40

标签: java java.util.scanner

我试图找到一种方法来获取实际键入变量的值,以便我可以在文件中打印它们。问题是扫描仪无法识别捷克字母,如“ř;á;ž;š”等。 这是代码示例:

String jmeno;
Scanner input= new Scanner(System.in, "utf-8");
jmeno = input.next();

我输入的内容:

Šárka

变量jméno中存储的内容:

??rka

“?”代表垃圾字符,黑框中的问号。 我应该如何调整代码,以便变量正确地收到字母?

我使用的电脑也有EN(美国)系统编码。

3 个答案:

答案 0 :(得分:1)

使用new Scanner(System.in)。这使用默认操作系统的编码,与System.in使用的编码相同。 String(一如既往)包含Unicode版本,然后您可以使用

将其写入文件
new OutputStreamWriter(new FileOutputStream(...), "UTF-8")

或其他(更简单)的方法。

答案 1 :(得分:0)

这应该是一个评论,但遗憾的是我还没有这个特权。在调试时(通过将一些文本输出到文件,浏览器或者只是在IDE中观看它们),不要急于说“它不起作用,因为我得到了?字符”。也许只是你的IDE /系统无法显示那些utf-8字符。要确定,您可以从文件/浏览器/调试器复制输出的文本,然后将其粘贴到Notepad ++(或其他具有十六进制编辑器的编辑器),然后使用view in hex,如果看到{{1} (utf-8的“无法解码此”代码),然后它就坏了。一切都很好。

答案 2 :(得分:-1)

我建议你试试

Scanner input= new Scanner(System.in, "ISO-8859-1");

编辑: 正如你所说,一些角色仍然无法正常工作,请考虑尝试:

Scanner input= new Scanner(System.in, "ISO-8859-2");

“ISO-8859-2”支持捷克Check this for more information