Java 接收65533作为字符的字符值(à;、Ø;、æ;、æ;等)!

Java 接收65533作为字符的字符值(à;、Ø;、æ;、æ;等)!,java,char,short,Java,Char,Short,我花了几个小时试图弄明白,为什么在控制台中通过扫描器输入像Ø这样的字符,然后获取数值时,我总是得到65533(unsigned short的最大值) 拉丁字符似乎不是这样。知道为什么吗 public static void main(String[] args) { Scanner sc = new Scanner(System.in); char[] chars = sc.next().toCharArray(); for(int i = 0; i < cha

我花了几个小时试图弄明白,为什么在控制台中通过扫描器输入像Ø这样的字符,然后获取数值时,我总是得到65533(unsigned short的最大值)

拉丁字符似乎不是这样。知道为什么吗

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]);
    }
}
publicstaticvoidmain(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
char[]chars=sc.next().toCharArray();
for(int i=0;i
65533=


i、 e.您使用的字符编码没有正确解释您的字符,因此被回退值替换。

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


如果执行
Scanner sc=new Scanner(System.in,System.getProperty(“file.encoding”),你的代码可能在任何地方都能正常工作。

也许你应该发布你的一些代码它实际上是一个非常简单直接的代码!我添加了代码。我该如何修复它呢?从@Vampire的评论开始,然后发布你的代码,这样我们就可以复制你的问题。不幸的是,没有!我正在考虑将字符串编码到base64,然后从那里继续我的操作。我不知道这会有什么帮助,但如果它解决了您的问题,请继续。但是,如果您想要将base64字符串转换回某些字符,您仍然必须知道
System.in
中的字节编码应该是
文件的内容。encoding
。但是,这一方法有效,
Scanner sc=new Scanner(System.in,“Cp1252”)
然后您可以在创建
系统后,将
文件.encoding
设置为其他内容。请注意,如果您硬编码该编码,您的代码将无法在Linux、Mac或Windows以外的任何其他系统上正常工作。