java scanner next Line()中文输入后返回乱码

java scanner.nextLine()读取中文后返回乱码

控制台调整过CHCP 65001 和936
chcp 65001显示?
936 显示@ 或者^ 等
重复显示同一符号

import java.util.Scanner;
 public class scannernextLinetest{
     public static void main(String[] args){
         Scanner scanner=new Scanner(System.in,"UTF-8");
         
         System.out.println("请输入汉字:");
         String chinese=scanner.nextLine();
         System.out.println(chinese);
     }
 }

img

疑惑是:即使是乱码,也应该不同啊?
诉求是: 1. 希望能教一下 怎么把上图结果变成不一样的乱码
2. 怎样把乱码调成汉字
谢谢!

首先,在使用Scanner读取字符串的时候,如果想要读取中文,需要在Scanner的构造函数中指定编码格式。你可以使用下面的代码构造Scanner对象:

Scanner scanner = new Scanner(System.in, "UTF-8");

这样就可以保证Scanner在读取字符串时正确地使用UTF-8编码。

然后你可以使用nextLine()方法来读取用户输入的字符串。

如果你想要把乱码调成汉字,可以尝试使用不同的编码格式,例如GBK。这样你可以使用下面的代码构造Scanner对象:

Scanner scanner = new Scanner(System.in, "GBK");

如果这样做仍然不行,可能是因为系统控制台的编码格式与Scanner的编码格式不一致。你可以使用chcp命令来查看系统控制台的编码格式,并使用控制台的编码格式来构造Scanner对象。

例如,如果系统控制台的编码格式是GBK,你可以使用下面的代码构造Scanner

对象:

Scanner scanner = new Scanner(System.in, "GBK");

如果你仍然无法解决问题,可以尝试使用其他方法来读取中文字符串,例如使用BufferedReader+InputStreamReader的方式。

下面是一个例子:

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in, "UTF-8"));
String chinese = reader.readLine();

这样就可以保证读取的字符串是正确的中文了。