Jython中文乱码问题
最近,在項(xiàng)目中需要用到Java代用Python的代碼,并且需要傳參數(shù),因此選用了Jython包,但是,如果在調(diào)用python腳本時(shí),出現(xiàn)了中文亂碼的現(xiàn)象。代碼如下:
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());
運(yùn)行結(jié)果如下:
結(jié)果很奇怪,傳進(jìn)去的參數(shù)中有中文不亂碼,但是寫在腳本中的中文亂碼了,開始以為是Python腳本中編碼的設(shè)置問題,上網(wǎng)搜了很久,答案都是在腳本中加入
# -*- coding: utf-8 -*- 或者sys.setdefaultencoding('utf-8')之類的,但是都沒有效果。后來想了想,是不是代碼中的code腳本傳進(jìn)Jython包中不是utf-8編碼的問題,因此試了試把code
腳本寫在文件中,并制定文件為utf-8編碼,使用:interpreter.execfile(“E:\\test.py”)調(diào)用腳本執(zhí)行,結(jié)果中文不亂碼了。
雖然上述方法解決了問題,但是如果每次動(dòng)態(tài)執(zhí)行腳本時(shí),都需要先把腳本存到.py文件中,然后在調(diào)用,這樣會(huì)很麻煩。
因此,研究了下Jython包,發(fā)現(xiàn)在講Java的字符串傳進(jìn)Jython包中時(shí),可以先轉(zhuǎn)化為PyString,并指定編碼,因此,修改上述程序。
運(yùn)行結(jié)果如下:
?
?
??
轉(zhuǎn)載于:https://www.cnblogs.com/junjiang3/p/7112789.html
總結(jié)
以上是生活随笔為你收集整理的Jython中文乱码问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。