带重音字符的键盘输入:Java

时间:2013-12-30 15:56:23

标签: java character-encoding java.util.scanner non-ascii-characters

我在Java中使用重音字符时正确接收键盘输入时遇到了问题。例如,我正在尝试输入类似“présenter”的东西,但它以“pr?senter”的形式出现。我不知道如何解决这个问题 - 我一直在尝试使用ISO-8859-1编码,但我仍然无法得到它。这是我的代码的一部分:

Scanner scan = new Scanner(new InputStreamReader(
                        System.in, Charset.forName("ISO-8859-1")));

我也尝试过使用UTF-8,但我遇到了同样的问题。不知道还能做什么!非常感谢!!

1 个答案:

答案 0 :(得分:2)

您是否尝试将read char序列输出到控制台?如果是这样,那就错了。控制台无法显示重音字符以及UTF-8编码字符。只需尝试将输入写入文件(如UTF-8),然后检查文件。

以下代码生成正确的结果:

    String charset = "ISO-8859-1";
    Scanner scan = new Scanner(System.in, charset);

    System.out.print("Enter your text line: ");
    String line = scan.next();
    System.out.println("Your input: " + line);

    File file = new File("out.txt");
    FileOutputStream fos = new FileOutputStream(file);

    fos.write(line.getBytes(charset));
    fos.close();

    FileReader fr = new FileReader(file);
    BufferedReader br = new BufferedReader(fr);
    String readLine = br.readLine();
    System.out.println("Your input (loaded from file): " + readLine);
    br.close();
    fr.close();

输出结果为:

    Enter your text line: présenter
    Your input: présenter
    Your input (loaded from file): présenter

文件内容正确无误。 “您的输入”中的错误字符是由于本地控制台设置,但文件中的值是正确的。