Jython中文亂碼問題

2022-09-15 20:21:14 字數 1419 閱讀 8988

最近,在專案中需要用到j**a代用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 = "";

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包,發現在講j**a的字串傳進jython包中時,可以先轉化為pystring,並指定編碼,因此,修改上述程式。

執行結果如下:

中文亂碼問題

母頁 tran cel.jsp?p user id p user id p paraxml mytran cel paraxml ie8對window.open二進位製流會遮蔽,用二次請求解決該問題 modify by 20120731。mytran cel paraxml encodeuri my...

中文亂碼問題

url位址中傳遞中文,接收亂碼。修改tomcat的server.xml.在埠號那一項中增加 uriencoding utf 8 connectiontimeout 20000 redirectport 8443 uriencoding utf 8 在form表單中中文亂碼 1.保證你的專案的屬性是u...

中文亂碼問題

中文亂碼問題 1.什麼時候會出現亂碼?編碼和解碼的方式不一致。2.請求時亂碼 a.get a.修改tomcat的配置檔案,即修改 tomcat conf server.xml中的70行,增加uriencoding utf 8 b.不修改解碼方式,讓servlet直接接收亂碼,然後採用iso8859 ...