Как декодировать сообщение пришедшее из класса Process по InputStream

Рейтинг: 0Ответов: 1Опубликовано: 10.04.2023

Вот такой код:

Process proc = Runtime.getRuntime().exec("ipconfig");
proc.waitFor();
InputStream in = proc.getInputStream();
byte[] input_bytes = new byte[in.available()];
for (int i = 0; i < input_bytes.length; i++) {
    input_bytes[i] = (byte)in.read();
}
String input_string = new String(input_bytes, StandardCharsets.UTF_8);
System.out.println(input_string);

Я запустил утилиту ipconfig, подождал пока она выполнится, после чего достал из процесса InputStream, прочитал все доступные байты из него, попытался их декодировать в строку, запустил программу, но вместо кириллицы он пишет знаки � и другие непонятные.

Пытался использовать разные кодировки, US_ASCII, UTF-16 и т. д., кириллицу все равно не декодирует.
Скорее всего, проблема в том, что коды кириллицы не вмещаются в диапазон byte, но, хоть метод in.read() и возвращает int, над методом стоит аннотация @Range(from = -1, to = 255), да и в конструктор класса String можно запихнуть лишь массив байтов

Можно ли как то это исправить и правильно декодировать кириллицу? Предлагайте любые способы, рассмотрю всё!

Ответы

▲ -1

Собственно в чём проблема, я разобрался, нужно было всего лишь использовать кодировку 866