UnicodeDecodeError: кодек 'charmap' не может декодировать байт 0x9d в позиции 1010494: сопоставление символов с ‹undefined›

пожалуйста, мне нужна помощь с этим:

url ='https://www.sec.gov/Archives/edgar/data/1437750/0001477932-13-004416.txt'
with open('file', 'wb') as f:
    f.write(requests.get('%s' % url).content)
with open('file',  'r') as t:
            words=  t.read()

Вышеприведенное дает мне следующую ошибку:

return codecs.charmap_decode(input,self.errors,decoding_table)[0]  
UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 1010494: character maps to < undefined>

Благодарю вас!


person user5282933    schedule 30.05.2017    source источник


Ответы (2)


Я только что столкнулся с той же проблемой. Когда я пытался прочитать файл, в одной из моих строк был двойной пробел: ' '. Удаление этого двойного пробела устранило проблему 0x9d.

person Russell    schedule 02.01.2019

Почему вы пишете свой файл как двоичный файл, а затем читаете его как строку юникода? Python не знает, как декодировать некоторые байты из исходного потока, пока вы не скажете ему, какой кодек использовать. Поскольку файл, который вы передали в своей первой команде, не закодирован в кодировке utf-8, попробуйте декодировать ваш файл в latin-1 при его чтении:

with open('file',  'r', encoding='latin-1') as t:
    words =  t.read()
person zwer    schedule 30.05.2017
comment
В каком ASCII-подобном наборе символов имеет значение 0x9d? Это недопустимая Windows-1252. Кодек Python latin-1 переводит его в Unicode 0x9D, что является командой операционной системы.[1] В этом мало смысла. Преобразование такого текста с помощью кодека latin-1 не приведет к сбою программы Python, но в Unicode вы получите поле с [009d]. Преобразование с помощью latin-1 просто решает проблему. Кажется, что это какая-то кавычка, когда она появляется в английском тексте. Но это не одна из специальных кавычек из Windows-1252. [1] fileformat.info/info/unicode/char/009d/index .htm - person John Nagle; 18.08.2017
comment
Мало того, что он не закодирован в UTF-8, кажется, что в страницу встроены двоичные данные. Вы не должны пытаться читать двоичные данные как текст! Использование кодировки latin-1 — это хак, которого следует избегать, если вы не используете его специально для очистки чужого беспорядка, и вы действительно знаете, что делаете. - person Mark Ransom; 19.08.2017