У меня есть кусок кода Python 2.7, который возвращает веб-страницу, закодированную в UTF-8. Это по существу делает это:Юникодские кириллические строки в Python 2.7
arequest=urllib2.urlopen(request.httprequest.host_url[:-1]+record.path)
response=arequest.read()
parser = etree.HTMLParser()
tree = etree.fromstring(response, parser)
Я затем вытягивать информацию тега из дерева:
imgtags=map(lambda x: {'template_tag':False,'tag_type':'img','page_id':record.id,'src_value':x.attrib.get("src",""),'seo_a_title_text': x.attrib.get("title",""),'seo_text': x.attrib.get("alt","")}, tree.findall(".//img"))
Проблема заключается в том, что полученный код возвращает это где такие элементы, как seo_a_title_text
кодируются с \xd0
и не \u0428
, что мне нужно:
[{'seo_a_title_text': u'\xd0\xa8\xd1\x82\xd0\xb0\xd1\x82\xd1\x8b ', 'src_value': '/logo.png', 'seo_text': u'Logo of \xd0\xa8\xd1\x82\xd0\xb0\xd1\x82\xd1\x8b ', 'template_tag': False, 'page_id': 150, 'tag_type': 'img'}]
кириллица строка «Штаты», и мне нужно сотрудничать nvert, что \xd0
и т. д. в \u0428\u0442\u0430\u0442\u044b
для успешной смены базы данных, в противном случае он выглядит как «Ð¨ÑÐ ° ÑÑ», когда я читаю его снова.
Как получить строки, похожие на \u
и т. Д., А не \x
и т. Д.? Мне, должно быть, что-то не хватает, но я часами цепляюсь в Интернете и в консоли, пытаясь заставить его работать.
Примечание стороны, в верхней части файла имеет этот комментарий:
# -*- coding: utf-8 -*-
Не уверен, если это будет влиять на ответы?
Подобно тому, как намек к ответу, ' '\ xd0 \ xa8 \ xd1 \ x82 \ xd0 \ XB0 \ xd1 \ x82 \ xd1 \ x8b' .decode ("utf8") == u '\ u0428 \ u0442 \ u0430 \ u0442 \ u044b''. – Phillip
Side-note: почти все, что связано с текстом, отличным от ASCII, лучше в Python 3. Если ничего другого, то факт, что только 'str' имеет' encode' и только 'bytes', имеет' decode' методы и ни молча конвертирует в другой затрудняет ошибки. Я бы сильно подумал о переключении. – ShadowRanger
"\ xd0 \ xa8 \ xd1 \ x82 \ xd0 \ xb0 \ xd1 \ x82 \ xd1 \ x8b" .decode ("utf8") превращается в ошибку UnicodeEncodeError: кодек 'charmap' не может кодировать символы в позиции 0-4 : character maps to –
Mike