Python 3 UnicodeDecodeError: кодек 'charmap' не может декодировать байт 0x9d

Я хочу создать поисковую систему, и я следую учебному курсу в какой-то сети. Я хочу проверить parse html

from bs4 import BeautifulSoup

def parse_html(filename):
    """Extract the Author, Title and Text from a HTML file
    which was produced by pdftotext with the option -htmlmeta."""
    with open(filename) as infile:
        html = BeautifulSoup(infile, "html.parser", from_encoding='utf-8')
        d = {'text': html.pre.text}
        if html.title is not None:
            d['title'] = html.title.text
        for meta in html.findAll('meta'):
            try:
                if meta['name'] in ('Author', 'Title'):
                    d[meta['name'].lower()] = meta['content']
            except KeyError:
                continue
        return d

parse_html("C:\\pdf\\pydf\\data\\muellner2011.html")

и он получает ошибку

UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 867: character maps to <undefined>enter code here

Я видел некоторые решения в Интернете с помощью encode(). Но я не знаю, как вставить функцию encode() в код. Кто-нибудь может мне помочь?

Ответы

Ответ 1

В Python 3 файлы открываются для вас (декодируется в Unicode); вам не нужно сообщать BeautifulSoup, какой кодек декодировать.

Если декодирование данных выходит из строя, это означает, что вы не сказали open() вызвать какой кодек использовать при чтении файла; добавьте правильный кодек с аргументом encoding:

with open(filename, encoding='utf8') as infile:
    html = BeautifulSoup(infile, "html.parser")

в противном случае файл будет открыт с вашим системным кодеком по умолчанию, который зависит от ОС.