Подтвердить что ты не робот

UnicodeEncodeError: кодек 'ascii' не может кодировать символ u '\ u2026'

Я изучаю urlib2 и красивый суп, и на первых тестах получаю такие ошибки, как:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2026' in position 10: ordinal not in range(128)

Кажется, много сообщений об этом типе ошибок, и я пробовал решения, которые я могу понять, но, похоже, у них есть уловка 22, например:

Я хочу напечатать:

post.text

(где текст - прекрасный метод супа, который просто возвращает текст)

str(post.text) и post.text

производят ошибки в Юникоде (на таких вещах, как правый апостроф ' и ...).

Итак, я добавляю:

post = unicode(post)

выше:

str(post.text)

то я получаю:

AttributeError: 'unicode' object has no attribute 'text'

Я также пробовал:

(post.text).encode()

и

(post.text).renderContents()

последнее приводит к ошибке:

AttributeError: 'unicode' object has no attribute 'renderContents'

а затем я попробовал:

str(post.text).renderContents()

и получил ошибку:

AttributeError: 'str' object has no attribute 'renderContents'

было бы здорово, если бы я мог просто определить где-то в верхней части документа 'make this content 'interpretable'' и все еще иметь доступ к требуемой функции text.

обновить: после предложений:

если я добавляю:

post = post.decode("utf-8")

выше:

str(post.text)

я получаю:

TypeError: unsupported operand type(s) for -: 'str' and 'int'.

если я добавляю:

post = post.decode()

выше:

str(post.text)

я получаю:

AttributeError: 'unicode' object has no attribute 'text'.

если я добавляю:

post = post.encode("utf-8")

выше:

(post.text)

я получаю:

AttributeError: 'str' object has no attribute 'text'

Я попытался:

print post.text.encode('utf-8')

и получил:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 39: ordinal not in range(128)

и для того, чтобы пытаться работать, я установил lxml для Windows:

http://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml

и реализовал его с помощью:

parsed_content = BeautifulSoup(original_content, "lxml")

в соответствии с:

http://www.crummy.com/software/BeautifulSoup/bs4/doc/#output-formatters

эти шаги, похоже, не повлияли.

переменными среды являются python 2.7.4 и красивый суп 4.

Решение:

получив более глубокое понимание unicode, utf-8 и красивых типов супов, это как-то связано с моей методологией печати, я удалил все мои методы и конкатенации str, например str(something) + post.text + str(something_else), так что это было something, post.text, something_else и он, кажется, хорошо печатает, за исключением того, что на этом этапе я меньше контролирую форматирование (например, места, вставленные в ,). благодарю вас за вашу помощь.

4b9b3361

Ответ 1

В Python 2 объекты unicode могут быть напечатаны только в том случае, если они могут быть преобразованы в ASCII. Если он не может быть закодирован в ASCII, вы получите эту ошибку. Вероятно, вы хотите явно закодировать его, а затем распечатать полученный str:

print post.text.encode('utf-8')

Ответ 2

    html = urllib.request.urlopen(THE_URL).read()
    soup = BeautifulSoup(html)
    print("'" + str(soup.encode("ascii")) + "'")

работал у меня; -)

Ответ 3

Попробовали ли вы .decode() или .decode("utf-8")?

И, я рекомендую использовать lxml с помощью html5lib parser

http://lxml.de/html5parser.html