一、问题描述
最近项目用Python写后台,用Java写前端,遇到用Runtime.getRuntime.exec()调用Python脚本时,Java端捕获脚本输出中文乱码的问题(无处不在的中文乱码...)。
二、解决方法
Java端调用Runtime.getRuntime.exec()运行脚本时会建立三根管道,分别用于传输被调用脚本的输入信息、输出信息、错误信息。
process = Runtime.getRuntime().exec(arg);
//获取脚本的输出流
OutputStream output = process.getOutputStream();
//获取脚本的错误流
InputStream error = process.getErrorStream();
//用UTF-8编码格式将读取到的字节解码为字符
InputStreamReader outputReader= new InputStreamReader(output,"utf-8");
InputStreamReader errorReader= new InputStreamReader(error,"utf-8");
当被调用的节本有中文输出的时候,还是乱码!!!因为Python安装在Windows环境下的默认编码格式是GBK!!!
我的解决办法:在被调用的脚本中增加如下代码
import io
import sys
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
注:一定要添加到其他依赖模块import之前(掉坑里差点没爬起来)