最近的一个项目,用Java做web服务器,里面有HTTP请求的需求,而Java对HTTP客户端的支持少之又少,而且不大好用,故转而求之Python。Python在这方面做的非常好,特别是包揽了对Cookie的管理,程序员不必再在上面费心。但是问题也随之而来,由于我的Python程序导入了许多第三方包,所以使用Java调用Python的时候只能通过命令行调用,这成了乱码的来源。
我们使用如下代码运行Python程序:
Process proc = Runtime.getRuntime().exec("python D:\\demo.py 参数1 参数2 参数3");
proc.waitFor();
在调用命令行的同时传入了三个参数,而且都是中文字符串。
然后,在Python中接收这三个参数:
# -*- coding: utf8 -*-
if __name__ == '__main__':
param1 = sys.argv[1]
param2 = sys.argv[2]
param3 = sys.argv[3]
于是param1、param2、param3就成了乱码。原因很简单,我的Python程序声明了编码类型为UTF-8,而命令行的默认编码是GBK,所以从命令行参数读取到的是GBK编码的字符串,所以如果按照UTF-8来解码肯定是乱码。解决方法是,读取到的三个参数,先解码为Unicode,再编码为UTF-8,代码更改如下: