Windows net.exe 使用驱动消息在 Java 上有无效字符
Windows net.exe use driver message has invalid characters on Java
我正在 运行从 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);
}
显示消息后的结果是:
我做错了什么?
该代码正在读取 DOS 命令的输出,该命令很可能正在使用 CP850
(Latin1)或 CP860
(葡萄牙语)字符集(使用 CHCP
命令中的 DOS windows 以显示实际代码页)。
要将读取的字节转换为字符,必须在 InputStreamReader
的构造函数中提供字符集名称,例如:
BufferedReader b = new BufferedReader(
new InputStreamReader(p.getErrorStream(), "Cp850")
);
我没有葡萄牙语OS所以无法测试
我正在 运行从 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);
}
显示消息后的结果是:
我做错了什么?
该代码正在读取 DOS 命令的输出,该命令很可能正在使用 CP850
(Latin1)或 CP860
(葡萄牙语)字符集(使用 CHCP
命令中的 DOS windows 以显示实际代码页)。
要将读取的字节转换为字符,必须在 InputStreamReader
的构造函数中提供字符集名称,例如:
BufferedReader b = new BufferedReader(
new InputStreamReader(p.getErrorStream(), "Cp850")
);
我没有葡萄牙语OS所以无法测试