#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. Да, он печатает по-разному для каждой ОС, но даже принудительное использование, как вы и сказали, ничего не меняет.