将65533作为字符的char值接收为(à,Ø,æ,æ等)!

时间:2017-01-04 11:22:07

标签: java char short

我一直在努力想知道为什么,当通过扫描仪在控制台中输入像Ø这样的字符时,然后得到数值,我总是得到65533(无符号短的最大值)?

拉丁字符似乎不是这种情况。知道为什么吗?

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    char[] chars = sc.next().toCharArray();

    for(int i = 0; i < chars.length; i++){

        System.out.println((int)chars[i]);
    }
}

2 个答案:

答案 0 :(得分:3)

65533 = Unicode Character 'REPLACEMENT CHARACTER' (U+FFFD)

即。您正在使用的字符编码中未正确解释您的字符,因此正在被后备值替换。

答案 1 :(得分:1)

您遇到编码问题 通过System.in的字节不在Scanner用于将这些字节转换为字符的编码中。
我猜您的System.in位于Cp1252(Windows默认编码),但扫描用户UTF-8要解码字节。
然后,字节序列不是有效的UTF-8字符,因此使用替换字符。

如果你Scanner sc = new Scanner(System.in, System.getProperty("file.encoding"));,你的代码应该可以正常运行。