Nach den Operationen, die Sie durchgeführt, werden Sie sehen:
>>> req.headers['content-type']
'text/html; charset=windows-1251'
und so:
>>> encoding=req.headers['content-type'].split('charset=')[-1]
>>> ucontent = unicode(content, encoding)
ucontent
ist nun eine Unicode-Zeichenfolge (von 140.655 Zeichen) - so zum Beispiel angezeigt werden ein Teil davon, wenn Ihr Terminal ist UTF-8:
>>> print ucontent[76:110].encode('utf-8')
<title>Lenta.ru: Главное: </title>
und Sie können suchen, etc, etc.
Bearbeiten: Unicode-I/O ist in der Regel schwierig (das kann sein, was den ursprünglichen Asker hält), aber ich werde das schwierige Problem der Eingabe von Unicode-Zeichenfolgen zu einem interaktiven Python-Interpreter umgehen (völlig unabhängig von der ursprünglichen Frage)) um zu zeigen, wie, sobald ein Unicode String richtig eingegeben wird (ich mache es mit Codepoints - doof aber nicht knifflig ;-), ist die Suche absolut ein Kinderspiel (und hoffentlich wurde die ursprüngliche Frage gründlich beantwortet). Wieder einen UTF-8-Terminal unter der Annahme:
>>> x=u'\u0413\u043b\u0430\u0432\u043d\u043e\u0435'
>>> print x.encode('utf-8')
Главное
>>> x in ucontent
True
>>> ucontent.find(x)
93
Hinweis: Beachten Sie, dass diese Methode nicht für alle Standorte arbeiten kann, da nur einige Websites Zeichenkodierung innerhalb der bedient Dokumente angeben (mit http-equiv Meta-Tags , beispielsweise).
Die Codierung erfolgt mit einer Funktion aus der Urllib-Bibliothek nicht von Urllib2. Von http://www.voidspace.org.uk/python/articles/urllib2.shtml#headers – Macarse
@Macarse ist dies nicht die Kodierung, auf die sich Vitaly bezieht, er bezieht sich auf das Entschlüsseln und Kodieren des tatsächlichen Anforderungskontexts mit '[byte string] '. decode (' [Zeichensatz] ') und u' [Unicode-Zeichensatz] '. encode (' utf-8 '). Sie beziehen sich auf Parameter für die Kodierungsanfrage. –
verwandt: [Eine gute Möglichkeit, den Zeichensatz/die Codierung einer HTTP-Antwort in Python zu erhalten] (http://stackoverflow.com/q/14592762/4279) – jfs