Неспособность написать немецкий 'umlauts' (äöü) из консоли в текстовый файл с Java - PullRequest
2 голосов
/ 05 октября 2010

В настоящее время я отчаянно пытаюсь записать немецкие умлауты, считанные с консоли, в текстовый файл с кодировкой utf8 в Windows 7.

Вот код для настройки сканера:

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 ]

3 голосов
/ 05 октября 2010

Ваша консоль, вероятно, не UTF-8, поэтому, когда вы делаете new Scanner(System.in, "UTF8");, вы создаете сканер с неправильной кодировкой, и ваши умлауты теряются при попытке прочитать строки из консоли.Вы можете использовать chcp в командной строке, чтобы проверить, какая кодовая страница используется.

На самом деле, вам вообще не нужно указывать кодировку.Если вы просто создаете сканер как new Scanner(System.in), следует использовать кодировку платформы по умолчанию.

2 голосов
/ 18 января 2012

У меня была похожая проблема (строка «ç» не была бы «обнаружена» сканером, а строки типа «Açores» имели бы символ ç «искаженный»).

Я решил это, объявив кодировку для языка:

Scanner keyboardReader = new Scanner(System.in, "iso-8859-1");
0 голосов
/ 05 октября 2010

Это сработало для меня, с немецкими умлаутами:

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();
    }
}
...