java—如何使用jython从输入流或字节编译带有编码声明的python文件?

lnlaulya  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(215)

在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 ?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题