Java调用Python时的编码问题
来源:互联网 发布:office电脑版办公软件 编辑:程序博客网 时间:2024/06/12 20:01
最近的一个项目,用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,代码更改如下:
# -*- coding: utf8 -*-if __name__ == '__main__': param1 = sys.argv[1].decode('GBK').encode('utf-8') param2 = sys.argv[2].decode('GBK').encode('utf-8') param3 = sys.argv[3].decode('GBK').encode('utf-8')
这样就搞定了。
困惑我很久的是Unicode这个东西,我一直以为Unicode就是UTF-8!!!可是昨天我才知道Unicode是一套复杂的字符编码标准,简单来说就是将人类使用的每个所谓字符与一个非负整数对应,并且保证不同的字符对应的整数一定不同。UTF-8是这个整数的编码方式,用1到4字节来表达一个整数。详细分析可参考知乎-《Unicode和UTF-8有何区别》。
0 0
- Java调用Python时的编码问题
- java调用MySQL的kettle资源库时的编码问题
- python 字符编码 调用其他程序 的一些问题记录
- C++ 调用 python 传入参数的编码问题
- python的编码问题
- Python的编码问题
- Python 的编码问题
- python的编码问题
- python编码的问题
- python的编码问题
- Python的编码问题
- python的编码问题
- Python的编码问题
- Python的编码问题
- python的编码问题
- Python的编码问题
- python的编码问题
- python的编码问题
- 《现代控制工程》负载元件方程的推导
- 安装nginx踩到的坑
- 继承NSOperation类完成能被cancel的耗时操作
- android sdk 更新
- Markdown学习 - 基本使用
- Java调用Python时的编码问题
- MyBatis_动态SQL
- 共享免费socks5账号
- 带动画的自定义view——做一个移动的箭头
- 【设计模式】工厂三模式(创建型)
- 个人技能准备
- SQLite学习手册(C/C++接口简介)
- android基础学习001_android 加载大图片内存不足系统崩溃问题
- 华为机试——完美数计算