java执行cmd命令返回结果中文乱码解决方案

5 篇文章 1 订阅

最近在做一个案例需要用java调用cmd执行python文件,但在获取返回结果的时候,中文出现了乱码。
代码及输出结果如下:

	public static String predictPython(String path, String param) throws IOException, InterruptedException {
		String exe = "python";
		String command = path+"WEB-INF\\classes\\python\\faceRecognition.py";
		String[] cmdArr = new String[] { exe, command, param, path+"WEB-INF\\classes\\python\\" };
		System.out.println( exe + " " + command + " " + param + " " + path+"WEB-INF\\classes\\python\\" );
		Process process = Runtime.getRuntime().exec(cmdArr);
		BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
		String pythonResult = "";
		String line;
		while ((line = in.readLine()) != null) {
			pythonResult = line;
			System.out.println("cmd返回结果:" + line);
		}
		in.close();
		int result = process.waitFor();
		System.out.println("执行结果:" + result);
		return pythonResult;
	}

输出结果:
在这里插入图片描述

解决方案:

只需要改一处地方,在实例化InputStreamReader的时候指定字符为GBK,更改后:

在这里插入图片描述
更改后的结果:
在这里插入图片描述

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Java中,可以使用`ProcessBuilder`和`Process`类来执行命令并截取其返回的字符串。下面是一个示例代码: ```java import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class CommandOutputExample { public static void main(String[] args) { try { String command = "dir"; // 要执行的命令,这里以执行dir命令为例 // 创建进程构建器 ProcessBuilder processBuilder = new ProcessBuilder(); processBuilder.command("cmd.exe", "/c", command); // Windows下执行命令需要用到cmd.exe // 启动进程并获取其输出流 Process process = processBuilder.start(); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); // 读取命令执行结果 String line; StringBuilder output = new StringBuilder(); while ((line = reader.readLine()) != null) { output.append(line).append("\n"); } // 等待命令执行完成 int exitCode = process.waitFor(); if (exitCode == 0) { System.out.println("命令执行成功!"); System.out.println("命令输出结果:\n" + output.toString()); } else { System.out.println("命令执行失败!"); } } catch (IOException | InterruptedException e) { e.printStackTrace(); } } } ``` 在这个示例中,我们使用`ProcessBuilder`来创建一个进程构建器,并指定要执行的命令。然后,我们启动进程并获取其输出流。通过读取输出流,我们可以获取命令执行的结果。 请注意,这个示例中使用的是Windows下的命令执行方式,因为使用了`cmd.exe`。如果您在其他操作系统上运行,可能需要调整执行命令的方式。另外,还要注意处理进程的异常情况,以及等待命令执行完成。 这只是一个简单的示例,您可以根据实际需求进行调整和扩展。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值