Windows net.exe使用驱动程序消息在Java上具有无效字符

问题描述 投票:0回答:1

我正在从Java应用程序运行进程以取消映射Windows 10上的Windows驱动程序。

该消息在运行命令后出现:

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

我在做什么错?

java windows joptionpane
1个回答
0
投票

该代码正在读取DOS命令的输出,该命令很可能正在使用CP850(Latin1)或CP860(葡萄牙语)字符集(在DOS窗口中使用CHCP命令显示实际的代码页) 。

要将读取的字节转换为字符,必须在InputStreamReader的构造函数中提供字符集名称,如下所示:

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

我没有葡萄牙语操作系统,所以我无法对其进行测试

© www.soinside.com 2019 - 2024. All rights reserved.