我试图找到一种方法来获取实际输入到变量中的值,这样我就可以在文件中打印它们。下面是代码示例:
String jmeno; Scanner input= new Scanner(System.in, "utf-8"); jmeno = input.next();
我键入的内容:
Šárka
变量jméno中存储的内容:
??rka
“?”表示垃圾字符,黑框中的问号。我应该如何调整代码,使字母被变量正确接收?我使用的计算机也有EN(US)系统编码。
nhhxz33t1#
使用new Scanner(System.in)。这使用默认的操作系统编码,与System.in使用的编码相同。String(一如既往)包含Unicode版本,然后您可以使用
new Scanner(System.in)
new OutputStreamWriter(new FileOutputStream(...), "UTF-8")
或其他(更简单的)方法。
iq0todco2#
我建议你试试
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
bcs8qyzn3#
在调试时(通过将一些文本输出到文件、浏览器,或者只是在IDE中查看它们),不要急于说“它不工作,因为我在这里得到了?字符”。也许只是你的IDE/系统无法显示那些utf-8字符。为了确保正确,你可以从file/browser/debugger中复制输出的文本,然后将其粘贴到Notepad++(或其他具有十六进制编辑器的编辑器),然后使用view in hex,如果你看到0xefbfbd(utf-8的“无法解码”代码),那么它就坏了。否则一切正常。
view in hex
0xefbfbd
3条答案
按热度按时间nhhxz33t1#
使用
new Scanner(System.in)
。这使用默认的操作系统编码,与System.in使用的编码相同。String(一如既往)包含Unicode版本,然后您可以使用或其他(更简单的)方法。
iq0todco2#
我建议你试试
编辑:正如你所说,一些字符仍然不工作考虑尝试:
“ISO-8859-2”支持捷克语Check this for more information
bcs8qyzn3#
在调试时(通过将一些文本输出到文件、浏览器,或者只是在IDE中查看它们),不要急于说“它不工作,因为我在这里得到了?字符”。
也许只是你的IDE/系统无法显示那些utf-8字符。
为了确保正确,你可以从file/browser/debugger中复制输出的文本,然后将其粘贴到Notepad++(或其他具有十六进制编辑器的编辑器),然后使用
view in hex
,如果你看到0xefbfbd
(utf-8的“无法解码”代码),那么它就坏了。否则一切正常。