Jython中文乱码问题

最近,在项目中需要用到Java代用Python的代码,并且需要传参数,因此选用了Jython包,但是,如果在调用python脚本时,出现了中文乱码的现象。代码如下:

PythonInterpreter interpreter = interpreter = new PythonInterpreter();

String code = "# -*- coding: utf-8 -*-\n" +
"import sys\n" +
"reload(sys)\n" +
"sys.setdefaultencoding('utf-8')\n" +
"import json\n" +
"def parse(strtest):\n" +
" jsonObj = json.loads(strtest)\n" +
" jsonObj[\"省份\"] = \"安徽省\"\n" +
" return json.dumps(jsonObj)";

interpreter.exec(code);
PyFunction func = (PyFunction)interpreter.get("parse",PyFunction.class);

String str = "{\"CityId\":18,\"CityName\":\"合肥\",\"ProvinceId\":27,\"CityOrder\":1}";
PyString str2 = Py.newStringOrUnicode(str);
PyObject pyObject = func.__call__(str2);
JSONObject json = new JSONObject(pyObject.toString());
System.out.println(json.toString());

运行结果如下:

结果很奇怪,传进去的参数中有中文不乱码,但是写在脚本中的中文乱码了,开始以为是Python脚本中编码的设置问题,上网搜了很久,答案都是在脚本中加入

# -*- coding: utf-8 -*- 或者sys.setdefaultencoding('utf-8')之类的,但是都没有效果。后来想了想,是不是代码中的code脚本传进Jython包中不是utf-8编码的问题,因此试了试把code

脚本写在文件中,并制定文件为utf-8编码,使用:interpreter.execfile(“E:\\test.py”)调用脚本执行,结果中文不乱码了。

虽然上述方法解决了问题,但是如果每次动态执行脚本时,都需要先把脚本存到.py文件中,然后在调用,这样会很麻烦。

因此,研究了下Jython包,发现在讲Java的字符串传进Jython包中时,可以先转化为PyString,并指定编码,因此,修改上述程序。

运行结果如下:

 

 

 

 

 

转载于:https://www.cnblogs.com/junjiang3/p/7112789.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值