如何在 PythonInterpreter (jython) 中获取 UTF-8 reader?

How to obtain UTF-8 reader in PythonInterpreter (jython)?

我在我的 Web 应用程序中使用嵌入式 Jython(版本 2.5.3),我尝试在我的 Java 代码中这样做:

PythonInterpreter pythonInterpreter = new PythonInterpreter();
pythonInterpreter.exec("import codecs");
pythonInterpreter.exec("codecs.getreader('utf8')");

但是我得到这个错误:

File "<string>", line 1, in <module>
File "__pyclasspath__/codecs$py.class", line 920, in getreader
LookupError: no codec search functions registered: can't find encoding 'utf8'

编码为'utf8'的reader如何正确获取?

根据python文档,编解码器模块中应该有'utf8'编码可用:https://docs.python.org/2/library/codecs.html#standard-encodings(小写/大写和连字符/下划线都是允许的)。

我用的是Windows7,java1.7.0_71。我猜 OS 应该无关紧要 - 这是 jboss(版本 7.2)上的 Web 应用程序 运行。该问题出现在 jython-standalone-2.5.3.jar 和常规 jython-2.5.3.jar.

我设法找到了这个问题的解决方案 - 这是一个配置错误。在将代码更改为:

后,它现在可以工作了
import java.util.Properties;
import org.python.util.PythonInterpreter;

(...)

Properties properties = new Properties();
properties.setProperty("python.path", pythonPath);
PythonInterpreter.initialize(System.getProperties(), properties, new String[] { "" });
PythonInterpreter pythonInterpreter = new PythonInterpreter();
pythonInterpreter.exec("import codecs");
pythonInterpreter.exec("codecs.getreader('utf8')");

其中 pythonPath 是 jython-2.5.3.jar 中“Lib”目录的路径,在部署的 WAR.

我最终将它全部包装在一些 PostConstruct Spring 方法中,该方法在启动 Spring 上下文时被调用。