Прочитать файл ANSI с польскими буквами и показать в консоли без ударений - PullRequest
2 голосов
/ 17 октября 2019

У меня есть эта строка "ĆćĘ꣏źł" в файле file.csv, которая кодируется (как показывает Notepad ++) как ANSI. Как я могу правильно показать эту строку в консоли, как CcEeLzzl.

Для удаления акцентов я использую StringUtils.stripAccents (myLine) из apache, но все еще получил "��Ee����"

        FileReader fr = null;
        try {
            String sCurrentLine;
            br = new BufferedReader(new FileReader(fileName2));
            while ((sCurrentLine = StringUtils.stripAccents(br.readLine())) != null) {
                System.out.println(StringUtils.stripAccents(sCurrentLine));
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null)
                    br.close();
                if (fr != null)
                    fr.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }```

I want in COnsole this "CcEeLzzl", not that "ĆćĘ꣏źł". Please help me.

1 Ответ

1 голос
/ 17 октября 2019

Похоже, вы хотите применить пользовательское сопоставление из польских букв к ascii, который находится за пределами домена stripAccents. Вероятно, вы должны определить это самостоятельно, например, как сделано ниже (показано только для «Ł» и «ł»).

Спойлер: нет, вам не нужно. Ответ на кодировку окон был виновником. При правильном декодировании StringUtils.stripAccents работал нормально. Смотрите комментарии. Но если ты когда-нибудь покинешь домен stripAccents ...

public void Ll() {
    Map<String, String> map = new HashMap<>();
    map.put("Ł", "L");
    map.put("ł", "l");

    System.out.println(Arrays.stream("ŁałaŁała".split("(?!^)"))
            .map(c -> {
                String letter = map.get(c);
                return letter == null ? c : letter;
            })
            .collect(Collectors.joining("")));
}
...