怎么让下面这个程序在Windows的终端(如CMD,PowerShell)中正常运行?
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请将下面一行的内容复制,然后粘贴到控制台中,按回车键结束");
System.out.println("aaa你好123桜色舞うころbbb보여줄게456");
System.out.print("请输入:");
String line = scanner.nextLine();
System.out.println("您输入的内容是:" + line);
System.out.println("您输入的内容和预期的内容是否一致:" + line.equals("aaa你好123桜色舞うころbbb보여줄게456"));
}
}
在IDEA中能正常运行,运行结果为:
请将下面一行的内容复制,然后粘贴到控制台中,按回车键结束
aaa你好123桜色舞うころbbb보여줄게456
请输入:[输入:]aaa你好123桜色舞うころbbb보여줄게456
您输入的内容是:aaa你好123桜色舞うころbbb보여줄게456
您输入的内容和预期的内容是否一致:true
在CMD中使用命令java Main.java
运行,运行结果分别为:
代码页为936(GBK)
请将下面一行的内容复制,然后粘贴到控制台中,按回车键结束 aaa你好123桜色舞うころbbb????456 请输入:aaa你好123桜色舞うころbbb????456 您输入的内容是:aaa???123?@??褦????bbb????456 您输入的内容和预期的内容是否一致:false
第二行韩文无法正常输出,且后续获取的中文、日文不正确
代码页为65001 (UTF-8)
请将下面一行的内容复制,然后粘贴到控制台中,按回车键结束 aaa你好123桜色舞うころbbb보여줄게456 请输入:aaa你好123桜色舞うころbbb보여줄게456 您输入的内容是:aaa&&123&&&&&&bbb&&&&456 您输入的内容和预期的内容是否一致:false
第二行输出正常,但后续获取的中文、日文、韩文均不正确
尝试更改代码如下:
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in, "UTF_8");
System.out.println("请将下面一行的内容复制,然后粘贴到控制台中,按回车键结束");
System.out.println("aaa你好123桜色舞うころbbb보여줄게456");
System.out.print("请输入:");
String line = scanner.nextLine();
System.out.println("您输入的内容是:" + line);
System.out.println("您输入的内容和预期的内容是否一致:" + line.equals("aaa你好123桜色舞うころbbb보여줄게456"));
}
}
在IDEA、CMD中的输出和上述一致,结果不正确
再次尝试更改代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in, "GBK");
System.out.println("请将下面一行的内容复制,然后粘贴到控制台中,按回车键结束");
System.out.println("aaa你好123桜色舞うころbbb보여줄게456");
System.out.print("请输入:");
String line = scanner.nextLine();
System.out.println("您输入的内容是:" + line);
System.out.println("您输入的内容和预期的内容是否一致:" + line.equals("aaa你好123桜色舞うころbbb보여줄게456"));
}
}
IDEA中的运行结果变成了:
请将下面一行的内容复制,然后粘贴到控制台中,按回车键结束
aaa你好123桜色舞うころbbb보여줄게456
请输入:aaa你好123桜色舞うころbbb보여줄게456
您输入的内容是:aaa浣犲ソ123妗滆壊鑸炪亞銇撱倣bbb氤挫棳欷勱矊456
您输入的内容和预期的内容是否一致:false
在CMD中使用命令java Main.java
运行,运行结果分别为:
代码页为936(GBK)
请将下面一行的内容复制,然后粘贴到控制台中,按回车键结束 aaa你好123桜色舞うころbbb????456 请输入:aaa你好123桜色舞うころbbb????456 您输入的内容是:aaa你好123桜色舞うころbbb????456 您输入的内容和预期的内容是否一致:false
虽然看起来第二行和第四行的输出一致,但是第二行的输出中的韩文无法正常输出,且后续判断的结果不为true
如果输入正确的内容,如下:请将下面一行的内容复制,然后粘贴到控制台中,按回车键结束 aaa你好123桜色舞うころbbb????456 请输入:aaa你好123桜色舞うころbbb보여줄게456 您输入的内容是:aaa你好123桜色舞うころbbb????456 您输入的内容和预期的内容是否一致:false
结果仍不正确
代码页为65001 (UTF-8)
请将下面一行的内容复制,然后粘贴到控制台中,按回车键结束 aaa你好123桜色舞うころbbb보여줄게456 请输入:aaa你好123桜色舞うころbbb보여줄게456 您输入的内容是:aaa&&123&&&&&&bbb&&&&456 您输入的内容和预期的内容是否一致:false
结果也仍不正确
此外
也尝试过添加参数运行,如
java -Dfile.encoding=UTF-8 Main.java
或
java -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 Main.java
但结果都不正确