2013-10-01 82 views
4

我想在Jython上運行一個python代碼,並且這段代碼包含一些Unicode字面值。我想將代碼作爲字符串傳遞(而不是從文件加載)。傳遞unicode字符到Jython

似乎在exec()方法調用時,unicode字符被轉換爲「?」字符:

PythonInterpreter interp = new PythonInterpreter(null, new PySystemState()); 
System.out.println("ā".codePointAt(0)); // outputs 257 
interp.exec("print ord(\"ā\")"); // outputs 63 

我似乎無法找到一種方式如何將字符串傳遞給解釋器而不會混淆這些字符。

回答

1

我無法解釋究竟發生了什麼,但如果一個Unicode對象作爲參數傳遞給ord()如果Python代碼被編譯成一個PyCode對象時,它爲我的作品:

import org.python.core.PyException; 
import org.python.core.PyCode; 
import org.python.util.PythonInterpreter; 

public class Main { 
    public static void main(String[] args) throws PyException { 

    PythonInterpreter interp = new PythonInterpreter(); 
    System.out.println("ā".codePointAt(0)); // outputs 257 
    interp.exec("print ord('ā')");    // outputs 63 

    String s = "print ord(u'ā')"; 
    PyCode code = interp.compile(s); 
    interp.exec(code);       // outputs 257 
    } 
} 
+0

謝謝,@mzjn ,像這樣的方法是在Jython用戶列表[這裏](http://sourceforge.net/p/jython/mailman/message/31474668)上的好人建議的。有了這種見解,我可以繼續前進。但是,使用您的方法或Jim在列表中提出的方法,Jython仍然無法運行像'print u「\ u0101」'這樣的代碼。 – Passiday

相關問題