Окончательно обессилив, прошу помощи у сообщества! Получил html-страницу в кодировке windows-1251, сохранил её в базу Django в текстовое поле. Все операции на машине в utf-8. Затем с этим html хочу получить через xpath нужный мне кусок html. Получение простого текста получается отлично. А в html вместо русских символов - кракозявки или двухсимвольные штуки.
Нашел в сети рекомендацию как передать lxml «правильную» кодировку того, что ему дают, через BeautifulSoup. Без толку. :( Кодировку я и так знаю и работа этого кода без bs4 ничем не отличается по выводу на терминал. Текст в консоли полученный от text_content() печатается отлично. Но вот html - нет. Помогите!
from lxml import html, etree
from bs4 import UnicodeDammit
content = my_page_html
doc = UnicodeDammit(content, is_html=True)
parser = html.HTMLParser(encoding=doc.original_encoding)
root = html.document_fromstring(content, parser=parser)
page_elements = root.xpath(page_queue.page.xpath_content)
title = root.find('.//title').text_content()
print(title) # тут все отображается отлично
print(etree.tostring(root, pretty_print=True))
# а тут вместо русского - мешанина, и добавление
# , encoding='windows-1251'
# дает только изменение вида мешанины с козявок на двухсимвольные штуки
Пробовал разные рекомендуемые функции получения внутреннго html - или выводят козявки, или ругаются на байтовую последовательность вместо текстовой.