Windows net .exe сообщение об использовании драйвера содержит недопустимые символы Java - PullRequest
0 голосов
/ 17 января 2020

Я запускаю процесс из Java приложения для отмены отображения драйвера Windows на Windows 10.

Сообщение появляется после команды запуска:

String command = String.format("C:\\Windows\\system32\\net.exe USE %s /delete /yes", BasePage.MAPPED_DRIVER);

, который анализируется следующим методом:

public String runCommand(String command) {
    Process p = Runtime.getRuntime().exec(command);
    String result = null;
    if (p.waitFor() != 0) {
        BufferedReader b = new BufferedReader(new InputStreamReader(p.getErrorStream()));
        String line;
        StringBuffer buffer = new StringBuffer();
        if ((line = b.readLine()) != null) {
            buffer.append(line);
        }
        result = buffer.toString();
        b.close();
    }
    return result;
}

После запуска команды сообщение приходит с недопустимыми символами при печати на консоли или показе на панели JOptionPane с использованием следующего кода:

JOptionPane.showMessageDialog(null, formatMessage(message),
 "Application Error", JOptionPane.ERROR_MESSAGE);

Строки упаковываются согласно следующему методу:

private String formatMessage(String msg) {
    return String.format("<html><body width=400>%s</body>" +
 "</html>", msg);
}

Результат после показа сообщения:

enter image description here

Что я делаю не так?

1 Ответ

1 голос
/ 18 января 2020

Этот код читает выходные данные команды DOS, которая, скорее всего, использует кодировку CP850 (Latin1) или CP860 (португальский) (используйте команду CHCP в DOS windows для отображения фактического кодовая страница).

Чтобы преобразовать прочитанные байты в символы, необходимо указать имя кодировки в конструкторе InputStreamReader, например:

BufferedReader b = new BufferedReader(
    new InputStreamReader(p.getErrorStream(), "Cp850")
);

У меня нет португальской ОС поэтому я не смог проверить это

...