UnicodeDecodeError: кодек 'charmap' не может декодировать байт 0x81 - PullRequest
0 голосов
/ 27 декабря 2018

Я работаю над проектом, использующим Python (3.6), в котором мне нужно прочитать текстовые файлы из каталога, который может содержать тысячи текстовых файлов, затем мне нужно провести некоторый анализ их и загрузить результаты в облачное хранилище Google.,Там возникают ошибки кодирования.

Вот что я пробовал:

из views.py:

def predict_encoding(file_path, n_lines=60):
    '''Predict a file's encoding using chardet'''
    import chardet

    # Open the file as binary data
    with open(file_path, 'rb') as f:
        # Join binary lines for specified number of lines
        rawdata = b''.join([f.read() for _ in range(n_lines)])
    encoding = chardet.detect(rawdata)['encoding']
    print('Default encoding is: {}'.format(encoding))
    if encoding is None:
        rawdata.decode('utf8').encode('ascii', 'ignore')
        print('updated decoding is: {}'.format(chardet.detect(rawdata)['encoding']))
    return chardet.detect(rawdata)['encoding']


encoding = predict_encoding(text_path)
txt = Path(text_path).read_text(encoding=encoding)

, но для некоторых файлов (см.файл примера ниже :) он возвращает ошибку вроде:

/ Users / abdul / Downloads / to_save / cert2.txt

Кодировка по умолчанию: Нет

обновленное декодирование: Нет

возвращение codecs.charmap_decode (input, self.errors, decoding_table) [0]

UnicodeDecodeError: кодек 'charmap' не может декодировать байт 0x81 в позиции 339: символотображается на

Вот пример, в котором возвращается эта ошибка: https://textuploader.com/d8ec5

1 Ответ

0 голосов
/ 27 декабря 2018

Файл, который вы пытаетесь проанализировать, представляет собой изображение (Compress (tm) Xing Technology Corp в заголовке файла).Поэтому перед проверкой кодировки вам необходимо проверить, является ли файл двоичным или нет.Для этого вы можете использовать следующее решение :

>>> is_binary_string(open(text_path, 'rb').read(1024))
True
...