将unicode字符传递给Jython

时间:2013-10-01 22:02:48

标签: java python unicode jython

我正在尝试在Jython上运行python代码,并且此代码包含一些Unicode文字。我想将代码作为String传递(而不是从文件加载)。

似乎在exec()方法调用时,unicode字符被转换为“?”字符:

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

我似乎找不到如何将字符串传递给解释器而不会弄乱这些字符的方法。

1 个答案:

答案 0 :(得分: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
  }
}