我想输入可能包含Java中字母åäö的字符串,但Scanner会将它们转换为其他字符。我也试过utf-8:
String s1 = new Scanner(System.in).nextLine();
String s2 = new Scanner(System.in, "utf-8").nextLine();
System.out.println(s1 + "|" + (int)s1.charAt(0));
System.out.println(s2 + "|" + (int)s2.charAt(0));
System.out.println((int)'å' + "|" + (int)'?');
这会产生:
å
å
?|8224
?|65533
229|63
使用utf-8,所有字符都变为65533。没有utf-8,ä变为8222,ö变为8221,Å变为65533,Ä变为381,Ö变为8482。
是否有一些替代输入法允许åäö?
我正在运行java 8u25,我正在从Windows控制台运行该程序。
答案 0 :(得分:4)
问题不在于Java,而在于使用自己编码的Windows控制台。您可以使用chcp
命令显示它。最有可能的是Codepage 850.在Java中,您可以像
new Scanner(System.in, "Cp850")
答案 1 :(得分:1)
您需要为输出流设置编码(请参阅this thread):
String s1 = new Scanner(System.in).nextLine();
String s2 = new Scanner(System.in, "utf-8").nextLine();
PrintStream out = new PrintStream(System.out, true, "UTF-8");
out.println(s1 + "|" + (int)s1.charAt(0));
out.println(s2 + "|" + (int)s2.charAt(0));
out.println((int)'å' + "|" + (int)'?');
答案 2 :(得分:0)
Windows cmd.exe不支持UTF-8编码。您必须使用WriteConsoleW
和ReadConsoleW
.,或使用chcp
命令,例如new Scanner(System.in, "Cp850")
。