UnicodeDecodeError: кодек «utf-8» не может декодировать байт 0xe3 в позиции 34: недопустимый байт продолжения - PullRequest
0 голосов
/ 25 июня 2018

Я хочу открыть текстовый файл на персидском языке в файле Python с кодом ниже:

 for line in codecs.open('0001.txt',encoding='UTF-8'):
       lines.appends(line)

но это дает мне эту ошибку:

> Traceback (most recent call last):
  File "/usr/lib/pycharm-community/helpers/pydev/pydevd.py", line 1596, in <module>
    globals = debugger.run(setup['file'], None, None, is_module)
  File "/usr/lib/pycharm-community/helpers/pydev/pydevd.py", line 974, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "/usr/lib/pycharm-community/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "/home/nlpuser/Documents/ms/Work/General_Dataset_creator/BijanKhanReader.py", line 24, in <module>
    for lin in codecs.open('corpuses/markaz/0001.txt',encoding='UTF-8'):
  File "/home/nlpuser/anaconda3/envs/tmpy36/lib/python3.6/codecs.py", line 713, in __next__
    return next(self.reader)
  File "/home/nlpuser/anaconda3/envs/tmpy36/lib/python3.6/codecs.py", line 644, in __next__
    line = self.readline()
  File "/home/nlpuser/anaconda3/envs/tmpy36/lib/python3.6/codecs.py", line 557, in readline
    data = self.read(readsize, firstline=True)
  File "/home/nlpuser/anaconda3/envs/tmpy36/lib/python3.6/codecs.py", line 503, in read
    newchars, decodedbytes = self.decode(data, self.errors)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe3 in position 0: invalid continuation byte

что не так с этим кодом?

и его вывод для файла:

0001.txt: текст расширенного ASCII, не относящийся к ISO, с ограничителями строки CRLF

1 Ответ

0 голосов
/ 25 июня 2018

UTF-8 имеет очень специфический формат, учитывая, что символ может быть представлен в любом месте от одного до четырех байтов.

Если символ однобайтовый , он будетпредставлен 0x00-0x7F.Если он представлен двумя или более, ведущий байт будет начинаться с 0xC2 to 0xF4, за которым следует от одного до трех продолжений байтов в диапазоне 0x80 to 0xBF.

В вашем случае Python обнаружил символ, который находится в позиции символа продолжения (т. Е. Один из символов, следующих за начальным символом), но имеет значение 0xE3, которое не является допустимым символом продолжения,Скорее всего, проблема в вашем текстовом файле, а не в вашей программе - либо неправильная кодировка, либо неправильная кодировка.

Используйте hexdump -C <file> или xxd <file>, чтобы проверить, какая у вас точная последовательность байтов, и file <file> дляпопытайтесь угадать кодировку, и мы могли бы сказать больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...