【问题标题】:Python script runs perfectly in Spyder (on Windows) - Doesn't work on LinuxPython 脚本在 Spyder(在 Windows 上)中完美运行 - 在 Linux 上不起作用
【发布时间】:2019-04-29 08:42:21
【问题描述】:

我编写了一个脚本来读取 .cnf 文件,分析一些内容,然后输出一些结果(通过 print())。为了读取 .cnf 文件,我使用以下行:

with open('config.cnf') as f:
file_content = f.read()

现在,如果我在 Spyder 环境 (Python 3.6) 中运行它,一切正常。脚本读取 config.cnf,执行操作并输出结果。如果我在 Linux 上运行完全相同的脚本(config.cnf 位于同一目录中),则会显示以下错误消息:

Traceback (most recent call last):
  File "Conf2Monit_V2.py", line 45, in <module>
    file_content = f.read()
  File "/usr/lib/python3.6/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x96 in Position 29834: invalid start byte

我使用以下命令:

python3 myScript.py 

我是 Python 和 Linux 的新手,所以如果这是一些基本错误,请不要厌倦。谢谢。

【问题讨论】:

  • 您是否检查过您尝试读取的配置文件的行尾在 Windows 和 Linux 上的编码方式是否相同?也许这为您指明了正确的方向:en.wikipedia.org/wiki/Newline#Representation
  • 好吧,我在我的 Linux 机器上运行了我的另一个 python 脚本,它工作得很好。它还通过 f.read() 读取文件。唯一的区别是,工作脚本读取 .nmap 文件,而损坏的脚本读取 .cnf 文件。所以这应该意味着问题不在编码中吧?
  • 我不知道 nmap 文件是如何编码的,但纯文本文件往往包含创建操作系统喜欢的行尾。您可以尝试将文件提供给您在 Linux 上创建的脚本,并且不要粘贴任何换行符。
  • 你是在 Windows 下的 Python 3 还是 Python 2 下运行这个程序?因为似乎在 Python 3 下你应该在两个平台上得到相同的错误。

标签: python linux cnf


【解决方案1】:

我猜这个问题可能是因为Historical reason behind different line ending at different platforms

如果是这种情况,请尝试this

否则你可以试试 Linux 的 iconv 命令。

您能否通过在您的 Linux 环境中运行以下命令来检查文件中字符的编码:

file -i <filename>

检查输出是否类似于charset=utf-8

如果没有,有一种方法可以将编码转换为 UTF-8,如图所示 here

它解释了如何将文件(“input.txt”)的编码从代码集 ISO88592 转换为 UTF8 代码集或 ASCII 并将结果存储为“output.txt”。

iconv -f ISO88592 -t UTF8 input.txt output.txt

因此,如果正在考虑的文件是 input.txt,您可能要遵循的步骤是:

  1. file -i input.txt
    假设它的输出类似于
    input.txt: text/plain; charset=iso-88592
  2. iconv -f ISO88592 -t UTF8 input.txt output.txt

【讨论】:

  • 我得到“Unknown-8bit”作为字符集。现在如果我尝试 iconv -f unknown8bit -t utf8 Input.cnf Output.txt,我只会收到一条错误消息
【解决方案2】:

解决方法很简单:

我在 Windows 编辑器中打开了该文件。然后在“另存为...”下,我能够将底部的设置从“ASCII”更改为“UTF-8”。然后我将文件传输回我的 Linux 系统等等。工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-28
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    • 2013-04-11
    • 2018-07-15
    相关资源
    最近更新 更多