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