在 Java 中使用 UTF-8 扫描输入

问题描述 投票:0回答:3

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

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

我输入的内容:

Šárka

变量jméno中存储了什么:

??rka

“?”代表垃圾字符,黑框里有问号
我应该如何调整代码,以便变量正确接收字母?

另外我用的电脑有EN(US)系统编码。

java utf-8 java.util.scanner
3个回答
1
投票

使用

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

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

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


0
投票

我建议你试试

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

编辑: 正如您所说,有些角色仍然无法使用,请考虑尝试:

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

“ISO-8859-2”支持捷克语查看此以获取更多信息


0
投票

这应该是一个评论,但遗憾的是我还没有那个特权。

调试时(通过将一些文本输出到文件、浏览器,或者只是在 IDE 中观察它们),不要急于说“它不工作,因为我在这里得到 ? 字符”。

也许只是您的 IDE/系统无法显示那些 utf-8 字符。

确实如此,您可以从文件/浏览器/调试器复制输出的文本,然后将其粘贴到 Notepad++(或其他具有十六进制编辑器的编辑器),然后使用

view in hex
,如果您看到
0xefbfbd
(utf -8 的“无法解码此”代码),然后它就坏了。否则一切都很好。

© www.soinside.com 2019 - 2024. All rights reserved.