java - Windows net.exe 使用驱动程序消息在 Java 上包含无效字符

标签 java windows joptionpane

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

运行命令后出现消息:

字符串命令 = 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

我做错了什么?

最佳答案

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

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

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

我没有葡萄牙语操作系统,因此无法测试它

关于java - Windows net.exe 使用驱动程序消息在 Java 上包含无效字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59792585/

相关文章:

java - 如何使用 Swings 在 Java Paint 中的选定区域中执行鼠标单击操作

java - 子类可以修改 Java 中抽象父类(super class)中静态方法的行为吗?

java - 按字母顺序排序arraylist(不区分大小写)

ruby-on-rails - 我的 Rails 服务器仅在 pg gem 被卸载时工作

windows - Perl 文件::查找 Windows 反斜杠目录路径

Java - 如果条件失败则返回到程序流程的开头

Java - 仅使用可比较的接口(interface)比较两个字段

c++ - windows上qt应用的内存泄漏检测工具

java - 检测代码是否在应用程序服务器 java 中运行的最佳方法

java - 来自 JOptionPane 的返回值表示选择的按钮