Страницы

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

понедельник, 24 декабря 2018 г.

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

Есть такой код:
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 выводит ответы пинга на русском языке по умолчанию. Может можно на англ поменять, но это на втором плане, хотелось бы на русском.


Ответ

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

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

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