首页 > 解决方案 > 如何使用 Jython 从 InputStream 或字节中编译带有编码声明的 Python 文件?

问题描述

在 Java 中,我想检查一些 Python 2 文件中的语法错误,因此使用 Jython 似乎是一个不错的选择。从理论上讲,这应该很容易,如另一个答案所示。当我从文件中读取时,我使用Reader. 我真的更喜欢使用InputStream.

Reader reader = openReaderToPythonFile();
new org.python.util.PythonInterpreter().compile(reader)

采用或作为参数的唯一compile()选项。这意味着我提供给它的内容已经是 Unicode 字符串形式,而不是字节。PythonInterpreterStringReader

问题是我想检查一个现有的 Python 文件,该文件在PEP 263之后的顶部有指示 UTF-8 编码的行。(这是因为默认情况下 Python 2 源文件被视为 ASCII。)它看起来像这样:

#!/usr/bin/python
# -*- coding: utf-8 -*-
…

即使我手动将文件(正确)读取为 UTF-8,当我将字符串(或Reader实例)传递PythonInterpreter给编译时,我也会收到此错误:

encoding declaration in Unicode string

换句话说PythonInterpreter,“这个文件有一个编码声明,但我不能尊重编码声明,因为在我有机会分析它之前你已经将字节转换为字符串”。但PythonInterpreter似乎没有提供一种方法来传递原始字节或(最好)一个InputStream.

如果文件包含编码声明,如何使用 Jython 编译 Python 文件?如果这不可能,作为一种解决方法,Jython 是否可以忽略编码声明并相信我已将字节正确转换为 aStringReader?

标签: javapythoncharacter-encodingjython

解决方案


推荐阅读