如何在Java中从终端读取重音字母?

问题描述 投票:0回答:1

我有以下 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");
  • 使用 PowerShell 而不是
    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中工作?

java eclipse character-encoding windows-console
1个回答
-2
投票

这是您发布的部分内容: 匈牙利诗人佩托菲的名字是什么?桑多尔 答案 (S?ndor) 不正确,正确答案是 Sándor

请注意‘S?ndor’,可能是字符编码的问题。

© www.soinside.com 2019 - 2024. All rights reserved.