Java扫描器和字母

Java扫描器和字母,java,input,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.char

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

您需要为输出流设置编码,请参见:


您需要为输出流设置编码,请参见:


Windows cmd.exe不支持UTF-8编码。您必须使用and或chcp命令,如new ScannerSystem.in、Cp850。

Windows cmd.exe不支持UTF-8编码。您必须使用and或chcp命令,如new ScannerSystem.in、Cp850。

问题不在于Java,而在于windows控制台,它使用自己的编码。您可以使用chcp命令使其显示。很可能是代码页850。在Java中,您可以这样使用

new Scanner(System.in, "Cp850")

问题不在于Java,而在于windows控制台,它使用自己的编码。您可以使用chcp命令使其显示。很可能是代码页850。在Java中,您可以这样使用

new Scanner(System.in, "Cp850")

另外,将输出写入文件时会发生什么情况?有三条println语句和五行输出。什么和什么有什么关系?@Pshemo我想这不是问题,表示å的229代码很好。可能Windows控制台有一些编码问题。Windows控制台不使用utf8,我认为它使用ISO 8859-1@Pshemo不知道。我怎么知道呢?还有,当你把输出写入文件时会发生什么?你有三条println语句和五行输出。什么和什么有什么关系?@Pshemo我想这不是问题,表示å的229代码很好。可能Windows控制台有一些编码问题。Windows控制台不使用utf8,我认为它使用ISO 8859-1@Pshemo不知道。我怎么知道呢?charAt是否能正确处理多字节字符?他的所有测试都是两字节UTF-8字符。@zebediah49-一旦这些字符进入内存,Java就使用UTF-16;charAt唯一不能很好地处理的字符是代理项对。charAt能正确处理多字节字符吗?他的所有测试都是两字节UTF-8字符。@zebediah49-一旦这些字符进入内存,Java就使用UTF-16;charAt无法很好地处理的唯一字符是代理项对。