有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

输入Java扫描器和字母

我想输入可能包含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

有没有其他的输入法可以支持åäö

我正在运行Java8U25,并且正在从windows控制台运行该程序


共 (3) 个答案

  1. # 1 楼答案

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

    new Scanner(System.in, "Cp850")
    
  2. # 2 楼答案

    您需要为输出流设置编码(请参见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)'?');
    
  3. # 3 楼答案

    Windows命令。exe不支持UTF-8编码。必须使用^{}^{}.,或者使用chcp命令,比如new Scanner(System.in, "Cp850")