Страницы

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

вторник, 31 декабря 2019 г.

ping на java из командной строки. проблема с кодировкой

#java #кодировка #cmd


Есть такой код:

  import java.io.BufferedReader;
  import java.io.InputStreamReader;

public class PingIP {

 public static void runSystemCommand(String command) {

    try {
        Process p = Runtime.getRuntime().exec(command);
        BufferedReader inputStream = new BufferedReader(
                new InputStreamReader(p.getInputStream()));

        String s = "";
        // reading output stream of the command
        while ((s = inputStream.readLine()) != null) {
            System.out.println(s);
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}

    public static void main(String[] args) {

    String ip = "google.com";
    runSystemCommand("ping " + ip);

}

}


Сохранял файл в разных кодировках из vs studio code. Сохранение в кириллице 1251
на скриншоте. Как поправить кодировку? Cmd выводит ответы пинга на русском языке по
умолчанию. Может можно на англ поменять, но это на втором плане, хотелось бы на русском.


    


Ответы

Ответ 1



Программы, которые рассчитаны на использование в Windows в консольном режиме, по историческим причинам используют для вывода кодировку CP866, которая применялась в DOS. Java считает, что строки должны содержать Unicode. Иными словами, поток, который вы получаете от процесса p, содержит CP866, а вы обращаетесь с ним так, как будто он содержит Unicode. Открывайте поток вот так: BufferedReader inputStream = new BufferedReader(new InputStreamReader( p.getInputStream(), Charset.forName("CP866"))); и всё будет в порядке.

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

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