Java调用Python时的编码问题

在Java项目中,由于HTTP客户端需求,采用Python作为辅助工具。然而,通过命令行调用Python时出现了乱码问题。本文探讨了Unicode与UTF-8的区别,指出Unicode是字符编码标准,而UTF-8是其一种实现方式,解释了Java与Python交互时可能出现的编码混淆现象。
摘要由CSDN通过智能技术生成

最近的一个项目,用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,代码更改如下:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值