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 に答える