在java中,我想检查一些Python2文件的语法错误,因此使用jython似乎是一个不错的选择。从理论上讲,这应该很容易,正如另一个答案所指出的那样。当我从文件中读取时,我使用 Reader
. 我真的更喜欢使用 InputStream
.
Reader reader = openReaderToPythonFile();
new org.python.util.PythonInterpreter().compile(reader)
唯一的 compile()
的选项 PythonInterpreter
随便拿一个 String
或者 Reader
作为参数。这意味着我提供给它的内容已经是unicode字符串形式,而不是字节。
问题是,我想检查一个现有的python文件,该文件的顶部有一行表示utf-8的编码,紧跟在pep263之后(这是因为python 2源文件在默认情况下被视为ascii)
# !/usr/bin/python
# -*- coding: utf-8 -*-
…
即使我手动读取文件(正确)为utf-8,当我传递字符串(或 Reader
示例)到 PythonInterpreter
要编译,我得到以下错误: encoding declaration in Unicode string
换句话说 PythonInterpreter
意思是,“这个文件有一个编码声明,但是我不能尊重这个编码声明,因为在我有机会分析它之前,你已经把字节转换成了一个字符串”。但是 PythonInterpreter
似乎没有提供传递原始字节或(最好)一个 InputStream
.
如果python文件包含编码声明,如何使用jython编译该文件?如果这是不可能的,那么作为一种解决方法,jython是否可以忽略编码声明并相信我已经将字节正确地转换为 String
或者 Reader
?
暂无答案!
目前还没有任何答案,快来回答吧!