未能使用java将控制台上的德语'变音符号'(äöü)写入文本文件

时间:2010-10-05 09:18:44

标签: java utf-8 console diacritics

目前我正在拼命尝试将从控制台读取的德语变音符号写入Windows 7上的utf8编码文本文件。

以下是设置扫描仪的代码:

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

以下是读取字符串的代码:

String s = scanner.nextLine();

以下是写入文件的代码:

    OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(this.targetFile), "UTF8");

osw.write(s);

不幸的是,代替示例“überraschung”,所写的文件在utf8中编码,但不会显示变音符号。怎么办?

3 个答案:

答案 0 :(得分:3)

您的控制台可能不是UTF-8,因此当您执行new Scanner(System.in, "UTF8");时,您正在使用错误的编码创建扫描程序,并且当您尝试从控制台读取行时,您的变音符号会丢失。

您可能希望在控制台提示符下使用chcp来检查正在使用的代码页。

实际上,您可能根本不需要指定编码。如果您只是将扫描程序创建为new Scanner(System.in),则应使用默认的平台编码。

答案 1 :(得分:2)

我遇到了类似的问题(扫描仪不会“检测到”字符串“ç”,而“Açores”会使字符串“乱码”。

我通过声明该语言的字符集来解决它:

Scanner keyboardReader = new Scanner(System.in, "iso-8859-1");

答案 2 :(得分:0)

这适用于我,德语变音符号:

import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;


public class P {

    public static void main(String[] args) throws Exception {
        BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
        String s = stdin.readLine();
        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:/p.txt"), "UTF-8");
        osw.write(s);
        osw.close();
    }
}