zoukankan      html  css  js  c++  java
  • Jython中文乱码问题

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

    PythonInterpreter interpreter = interpreter = new PythonInterpreter();

    String code = "# -*- coding: utf-8 -*- " +
    "import sys " +
    "reload(sys) " +
    "sys.setdefaultencoding('utf-8') " +
    "import json " +
    "def parse(strtest): " +
    " jsonObj = json.loads(strtest) " +
    " jsonObj["省份"] = "安徽省" " +
    " 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,并指定编码,因此,修改上述程序。

    运行结果如下:

     
    
    
  • 相关阅读:
    selenium+java利用AutoIT实现文件上传
    java+selenium自动化遇到confirm弹窗,出现NoAlertPresentException: no alert open
    Appium遇到问题:
    selenium2+java切换窗口
    nodejs
    连续12天的加班工作总结-根据客户选择来生成后续表单页面
    最近三家公司面试的总结吐槽及一点点总结
    nodeJs-autoMerge
    nodeJs-autoBulid
    Angular 学习笔记——ng-Resource1
  • 原文地址:https://www.cnblogs.com/junjiang3/p/7112789.html
Copyright © 2011-2022 走看看