Что означает номер позиции в этом UnicodeError: кодек «gbk» не может декодировать байт 0x91 в позиции 2196 » - PullRequest
0 голосов
/ 26 июня 2019

Мне часто приходится сталкиваться, когда я пытаюсь манипулировать данными, например, «UnicodeDecodeError: кодек« gbk »не может декодировать байт 0x91 в позиции 2196: недопустимая многобайтовая последовательность».

Я нашел способ обойти эту ошибку, но мое любопытство заставляет меня исследовать, что находится в положении 2196.

Здесь возникает вопрос :

Как понятьномер 2196?Я имею в виду, какую кодировку использовать при подсчете от 1,2, ..., 2196.UTF-8?GBK?двоичная?hex или что-то еще?И как я могу увидеть число в этой позиции, не выбрасывая ошибку?

Вот пример кода:

with open(r"G:\ETCData\6aMTC\2019-06-01.txt", "r") as fp:
    for i, line in enumerate(fp):
        if i == 6:
            pass

UnicodeDecodeError                        Traceback (most recent call last)
<ipython-input-2-6810d8c84b34> in <module>()
      1 with open(r"G:\ETCData\6aMTC\2019-06-01.txt", "r") as fp:
----> 2     for i, line in enumerate(fp):
      3         if i == 6:
      4             pass

UnicodeDecodeError: 'gbk' codec can't decode byte 0x91 in position 2196: illegal multibyte sequence

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Проблема здесь в том, что функция декодирования вызывается из внутренних частей системы io.2196 - позиция ошибочного байта в буфере чтения.Если ваш файл был достаточно коротким, чтобы его можно было прочитать в одном фрагменте, или если ошибка произошла в первом фрагменте, то это позиция байта в файле.В любом другом случае будет трудно угадать реальную позицию байта в файле.

КСТАТИ b'\x91' - это ЛЕВОЙ ОДНОМ ОЦЕНОЧНОЙ ЦЕНЫ Юникод U + 2018 в кодировке cp1252.

1 голос
/ 26 июня 2019

Вам необходимо указать правильную кодировку при открытии файла. Попробуйте добавить это к команде open:

with open(r"G:\ETCData\6aMTC\2019-06-01.txt", "r", encoding="utf-8") as fp:
    for i, line in enumerate(fp):
        if i == 6:
            pass

Re номер 2196 - это просто говорит о том, что он не может правильно прочитать символ в позиции 2196. Это буквально позиция символа в строке от начала этой строки.

Чтобы увидеть его, проверьте, какое было значение line во время ошибки, и откройте файл txt в любом текстовом редакторе. Найдите строку и найдите символ.

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