最近,在專案中需要用到j**a代用python的**,並且需要傳引數,因此選用了jython包,但是,如果在呼叫python指令碼時,出現了中文亂碼的現象。**如下:
pythoninterpreter interpreter = interpreter = new pythoninterpreter();結果很奇怪,傳進去的引數中有中文不亂碼,但是寫在指令碼中的中文亂碼了,開始以為是python指令碼中編碼的設定問題,上網搜了很久,答案都是在指令碼中加入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());
執行結果如下:
# -*- 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 ...