Что может вызвать эту ошибку: UnicodeDecodeError: код «utf-8» c не может декодировать байт 0xff в позиции 568: недопустимый начальный байт - PullRequest
0 голосов
/ 03 мая 2020

Я очень новичок в кодировании и python, поэтому я действительно запутался с этой ошибкой. Вот мой код из упражнения, где мне нужно найти наиболее часто используемое слово в каталоге с несколькими файлами

import pathlib

directory = pathlib.Path('/Users/k/files/Code/exo')

stats ={}

for path in directory.iterdir():
    file = open(str(path))
    text = file.read().lower()

    punctuation  = (";", ".")
    for mark in punctuation:
        text = text.replace(mark, "")


    for word in text.split():
        if word in stats:

            stats[word] = stats[word] + 1
        else:
            stats[word] = 1

most_used_word = None
score_max = 0
for word, score in stats.items():
    if score > score_max:
        score_max = score
        most_used_word = word

print(word,"The most used word is : ", score_max) 

вот что я получаю

Traceback (most recent call last):
  File "test.py", line 9, in <module>
    text = file.read().lower()
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 568: invalid start byte

Что может вызвать эту ошибку?

1 Ответ

0 голосов
/ 03 мая 2020

Возможно, ваш файл содержит символы, отличные от ascii, поэтому вы должны декодировать их, чтобы UnicodeDecodeError исчез. Вы можете попробовать чтение в режиме 'rb', например так:

file = open(str(path), 'rb')

Вкл. Windows, добавление к режиму 'b' открывает файл в двоичном режиме, поэтому существуют также режимы как 'rb', 'wb' и 'r + b'. Python на Windows делает различие между текстовыми и двоичными файлами; символы конца строки в текстовых файлах автоматически слегка изменяются при чтении или записи данных. Это закулисное изменение файловых данных подходит для текстовых файлов ASCII, но оно повреждает двоичные данные, подобные этим в файлах JPEG или EXE. Будьте очень осторожны, используя двоичный режим при чтении и записи таких файлов. На Unix не помешает добавить 'b' в режим, так что вы можете использовать его независимо от платформы для всех двоичных файлов.

(из документов )

...