我正在尝试找到一种方法来获取实际输入到变量中的值,以便我可以在文件中打印它们。问题是扫描仪无法识别捷克语字母,例如“ř ; á ; ž ; š”等。 这是代码示例:
String jmeno;
Scanner input= new Scanner(System.in, "utf-8");
jmeno = input.next();
我输入的内容:
Šárka
变量jméno中存储了什么:
??rka
“?”代表垃圾字符,黑框中的问号。 我应该如何调整代码,以便变量正确接收字母?
另外我用的电脑有EN(US)系统编码。
使用
new Scanner(System.in)
。这使用默认操作系统的编码,与 System.in 使用的相同。字符串(一如既往)包含 Unicode 版本,然后您可以使用 将其写入文件
new OutputStreamWriter(new FileOutputStream(...), "UTF-8")
或其他(更简单的)方法。
我建议你试试
Scanner input= new Scanner(System.in, "ISO-8859-1");
编辑: 正如您所说,有些角色仍然无法使用,请考虑尝试:
Scanner input= new Scanner(System.in, "ISO-8859-2");
“ISO-8859-2”支持捷克语查看此以获取更多信息
这应该是一个评论,但遗憾的是我还没有那个特权。
调试时(通过将一些文本输出到文件、浏览器,或者只是在 IDE 中观察它们),不要急于说“它不工作,因为我在这里得到 ? 字符”。
也许只是您的 IDE/系统无法显示那些 utf-8 字符。
确实如此,您可以从文件/浏览器/调试器复制输出的文本,然后将其粘贴到 Notepad++(或其他具有十六进制编辑器的编辑器),然后使用
view in hex
,如果您看到 0xefbfbd
(utf -8 的“无法解码此”代码),然后它就坏了。否则一切都很好。