日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Jython中文乱码问题

發(fā)布時(shí)間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jython中文乱码问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近,在項(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。