UnicodeEncodeError:’ charmap ‘кодек не может кодировать символ’ u2014 ‘ Python красивый суп

Вот мой код:

soup = bs4.BeautifulSoup(res.text, "html.parser")
linkElems = soup.select('.r a')

for i in range(len(linkElems)):
    t = linkElems[i].findAll(text=True)
    print(t)

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

Traceback( последний последний вызов): файл «C:PathPythoncode.py»,
строка 17, in
print (t) File «C:Program файлыPython 3.5libencodingscp437.py», строка 19, in encode
возврат кодеков.charmap_encode (input, self.ошибки, encoding_map) [0] UnicodeEncodeError: кодек’ charmap ‘не может кодировать символ’ u2014 ‘ в
позиция 9: символьные карты

Линия print(t)дает мне ошибку.

Я использую Python 3 и красивый суп 4. Как избавиться от этой ошибки?

1 ответ

  1. При открытии файла используется кодировка CP437, которая в вашей операционной системе (которую вы не указали) используется по умолчанию.

    Когда CP437 изучает файл, он обнаруживает символ, который он не может кодировать (символ Юникода 2014, шестнадцатеричный или десятичный, вы не указали).

    Поэтому он ошибается, говоря вам, что он не может кодировать символ.

    Способ исправить это, изменив кодировку на UTF-8, потому что он может декодировать все символы Юникода, и, вероятно, то, что файл действительно кодируется, потому что UTF-8 используется во всем мире.

    Чтобы изменить его на UTF-8, используйте этот код:

    soup = bs4.BeautifulSoup(res.text, "html.parser", encoding="utf-8").

    Это изменяет кодировку на UTF-8 (потому что я добавил encoding="utf-8"), Поэтому теперь вместо выполнения C:\Program Files\Python 3.5\lib\encodings\cp437.pyдля кодирования он выполняетC:\Program Files\Python 3.5\lib\encodings\utf8.py, который кодирует правильно.