Java Scanner和字母åäö

时间:2014-10-22 15:54:53

标签: java input

我想输入可能包含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控制台运行该程序。

3 个答案:

答案 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编码。您必须使用WriteConsoleWReadConsoleW.,或使用chcp命令,例如new Scanner(System.in, "Cp850")