我有以下 Java 片段:
System.out.print("What is the first name of the Hungarian poet Petőfi? ");
String correctAnswer = "Sándor";
Scanner sc = new Scanner(System.in);
String answer = sc.next();
sc.close();
if (correctAnswer.equals(answer)) {
System.out.println("Correct!");
} else {
System.out.println("The answer (" + answer + ") is incorrect, the correct answer is " + correctAnswer);
}
这在 Eclipse 中工作正常,但在 Windows 终端中不起作用:即使我输入正确的答案
Sándor
,比较也会失败。这就是它在 Eclipse 中的样子:
What is the first name of the Hungarian poet Petőfi? Sándor
Correct!
与命令行相同:
What is the first name of the Hungarian poet Petőfi? Sándor
The answer (S?ndor) is incorrect, the correct answer is Sándor
我尝试过但没有成功的方法如下:
CHCP 65001
(将代码页更改为UTF-8):仅当单词Petőfi
显示不正确时才需要此操作,但对输入没有帮助。StandardCharsets.UTF_8
或 "UTF-8"
传递至 Scanner
。InputStreamReader
(有或没有传递编码)而不是Scanner
。-Dfile.encoding=UTF-8
命令行参数。System.setProperty("file.encoding", "UTF-8");
cmd
我仔细检查了:Java源文件的编码是UTF-8。
它可以在 Git Bash 中运行,但字母 ő(以及所有其他重音字符,不仅仅是这个)在该终端中显示不正确:
What is the first name of the Hungarian poet Pet▒fi? Sándor
Correct!
奇怪的是,即使比较也有效,输入重音字符看起来很好,重复显示相同的字符却不起作用:
What is the first name of the Hungarian poet Pet▒fi? Péter
The answer (P▒ter) is incorrect, the correct answer is S▒ndor
以下内容对 Windows 终端有帮助:
Console console = System.console();
String answer = console.readLine();
但这在 Eclipse 中不起作用:
What is the first name of the Hungarian poet Petőfi? Sándor
The answer (Sándor) is incorrect, the correct answer is Sándor
我的Java版本是22.0.2,但问题似乎不是特定于版本的。
作为交叉检查,我在 Python 中尝试了相同的方法,它在 Windows 终端和 IDE 中都运行良好,没有任何问题:
answer = input('What is the first name of the Hungarian poet Petőfi? ')
correct_answer = 'Sándor'
if answer == correct_answer:
print('Correct')
else:
print('The answer (' + answer + ') is incorrect, the correct answer is ' + correct_answer)
所以我的问题是:如何让它发挥作用?有没有一个通用的解决方案可以在Windos终端和Eclipse中工作?
这是您发布的部分内容: 匈牙利诗人佩托菲的名字是什么?桑多尔 答案 (S?ndor) 不正确,正确答案是 Sándor
请注意‘S?ndor’,可能是字符编码的问题。