4

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

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

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

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

4

1 回答 1

2

我无法准确解释会发生什么,但如果将 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
  }
}
于 2013-10-03T12:50:34.123 回答