Я изучаю 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 и он, кажется, хорошо печатает, за исключением того, что на этом этапе я меньше контролирую форматирование (например, места, вставленные в ,). благодарю вас за вашу помощь.