Страницы

Поиск по вопросам

пятница, 7 июня 2019 г.

Проблема с кодировками

Имеется утилита, которая запускает батники, которые в свою очередь собирают инфу с помощью утилиты wmic и потом с них форматирует отчет на рабочий стол.
Программа в общем-то ничего сложного не делает, обычная работа с файлами и текстом, если упростить, но проблема в том, что при чтении файла (в файле точно не UTF-8, word определил кодировку, как Юникод) поэтому геморрой с обработкой информации, с этим я в общем-то справился, вот только на ноутах она выдает дичь, где используется кириллица.
К слову к примеру если в строку я записываю кириллицу сам, то всё ок. Проблема только с файлом. Вот 1 из методов.
void networkAdapterGet() { StringBuilder result = new StringBuilder(); try(BufferedReader reader = new BufferedReader(new FileReader(NETWORK_ADAPTER_INFO_PATH)); BufferedWriter writer = new BufferedWriter(new FileWriter(TEMP_RESULT_FILE_PATH, true))) { line = reader.readLine(); while (line != null){ if (line.length() > 1){ line = trimSpaces(line); line = networkAdapterProcessing(line); if (!line.equals("")){ result.append(line); result.append(lineSeparator); } } line = reader.readLine(); } writer.write("Сетевые устройства:"); writer.write(lineSeparator); writer.write(result.toString()); writer.write(lineSeparator); writer.write(lineSeparator); } catch (IOException e) { e.printStackTrace(); } }
Скорее всего зря повелся наFileReader/Writer и думаю основная проблема, как раз таки в Reader'е. Пошаманил с кодировками на открытии и получил фигу, упало как раз таки из-за несовпадения кодировок, можно конечно перебрать вариантов там пара всего, но хотелось бы узнать можно ли как-то это дело исправить. Это пока единственный мешающий/раздражающий баг на данном этапе разработки утилитки.


Ответ

Нужно писать в той кодировке, которая читается клиентом. Чтобы указать кодировку надо заменить FileWriter на
new OutputStreamWriter(new FileOutputStream(TEMP_RESULT_FILE_PATH), StandardCharsets.UTF_8);
если кодировка UTF_8 не подходит, то можно попробовать KOI-8 или CP1251, или другая кодировка, которая поддерживает кирилицу, например CP866

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

Отправить комментарий