Сценарий Python отлично работает в Spyder (в Windows) - не работает в Linux - PullRequest
0 голосов
/ 29 апреля 2019

Я написал скрипт, который читает файл .cnf, анализирует некоторые вещи и затем выводит некоторые результаты (через print()). Для чтения файла .cnf я использую следующую строку:

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

Теперь, если я запускаю это в Spyder-Environment (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, поэтому, пожалуйста, не сыт по горло, если это какая-то основная ошибка. Спасибо.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Решение было простым:

Я открыл файл в редакторе Windows. Затем в разделе «Сохранить как ...» я смог изменить настройки внизу с «ASCII» на «UTF-8». Затем я перенес файл обратно в мою систему Linux и так далее. Работали.

0 голосов
/ 29 апреля 2019

Я предполагаю, что проблема может быть из-за Историческая причина, по которой разные строки заканчивались на разных платформах

Если это так, пожалуйста, попробуйте на это

Иначе вы можете попробовать команду iconv в Linux.

Можете ли вы проверить кодировку символов в файле, выполнив следующую команду в вашей среде Linux:

file -i <filename>

Проверьте, что-то вроде charset=utf-8

Если нет, есть способ перевести кодировку в UTF-8, как показано здесь

В нем объясняется, как преобразовать кодировку файла ("input.txt") из кодового набора ISO88592 в кодовый набор UTF8 или в ASCII, и сохраняется результат как "output.txt".

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

Итак, вы можете выполнить следующие шаги, если рассматриваемый файл - input.txt:

  1. файл -i input.txt
    и скажем, что его вывод происходит примерно так:
    input.txt: text / plain; кодировка = изо-88592
  2. iconv -f ISO88592 -t UTF8 input.txt output.txt
...