Не удается прочитать файлы ISO-8859-1 на Wildfly 10, работающем под управлением Linux?

#java #linux #character-encoding #wildfly #iso-8859-1

#java #linux #кодировка символов #wildfly #iso-8859-1

Вопрос:

Я использую автономный сервер wildfly 10.1.0 и обновление jdk версии 1.8.0 161 (x64).

При чтении файлов в кодировке ISO-8859-1, когда wildfly работает под управлением Linux, возникает проблема.

Символы похожи Ç и É остаются такими Ã? . Когда код выполняется в Windows, все символы остаются в порядке.

Я проверил, и файл действительно закодирован как ISO-8859-1. Кроме того, код принудительно выполняет чтение файла как ISO-8859-1:

 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "ISO-8859-1"));
  

Я пробовал перебирать все доступные кодировки, но хороших результатов не получил:

 Charset.availableCharsets().keySet().stream().forEach( cs -> {
    try {
        Charset charset = Charset.forName(cs);
        BufferedReader bufferedReader = Files.newBufferedReader(importFile.toPath() , charset );
        File out = new File(outDir   cs   ".txt");
        BufferedWriter bufferedWriter = Files.newBufferedWriter(out.toPath(), charset , StandardOpenOption.CREATE);
        String ln = null;
        bufferedWriter.write(cs "n");
        while ( (ln = bufferedReader.readLine()) != null ) {
            bufferedWriter.write(ln   "n");
            System.out.println(ln);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
} );
  

Как и ожидалось, это не проблема с самой операционной системой, потому что, если я запускаю простую Java-программу вне сервера приложений, которая считывает тот же файл и записывает его содержимое, все проходит отлично.

Кто-нибудь может мне помочь? Я тестировал на Ubuntu 18.04 с UTF-8 в качестве системной кодировки по умолчанию.

Комментарии:

1. Попробуйте напечатать System.getProperty(«file.encoding»)) в начале вашей программы. Кодировка по умолчанию (на уровне операционной системы) может отличаться. Если это так, принудительно запустите его, используя: java -Dfile.encoding= ISO-8859-1.

2. Да, он печатает по-разному для каждой ОС, но даже принудительное использование, как вы и сказали, ничего не меняет.