Frage

Ich bin das Abrufen einer Webseite ( http://autoweek.com ) und versucht, es zu verarbeiten, aber kodieren Fehler bekommen . Autoweek erklärt "iso-8859-1" Codierung und hat das Wort "Nürburgring" (u mit Umlaute)

ich:

# -*- encoding: utf-8 -*-
import urllib
webpage = urllib.urlopen(feed.crawl_url).read()
webpage.decode("utf-8")

es gibt mir die folgende Fehlermeldung:

'utf8' codec can't decode bytes in position 7768-7773: unsupported Unicode code range"

wenn ich .decode Schritt umgehen und eine Analyse mit lxml Bibliothek tun, wirft es einen Fehler, wenn ich analysierte Titel Datenbank speicherte:

'utf8' codec can't decode bytes in position 45-50: unsupported Unicode code range

Meine Datenbank hat Zeichensatz UTF-8 und Sortierungs utf-general-ci

Meine Einstellungen:
 Django
 Python 2.4.3
 MySQL 5.0.22
 MySQL-Python 1.2.1
 mod_python 3.2.8

War es hilfreich?

Lösung

autoweek.com scheint über seine eigene Codierung verwirrt. Es erklärt widersprüchlichen charset Definitionen:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

und später ...

<meta charset=iso-8859-1"/>.

iso-8859-1 ist die richtige, da dies im Header vom Webserver und durch die .info() Methode zurückgegeben wird (und es decodiert tatsächlich), aber dies zeigt, dass man nicht unbedingt auf dem Content-Type verlassen kann Erklärung in Web-Seiten. Sie sollten das Verfahren durch lavinio beschrieben folgen.

Andere Tipps

Wenn die webpage Codierung iso-8859-1 erklärt, können Sie nicht nur nicht webpage.decode("iso-8859-1")?

An diesem Punkt webpage wird für Ihre Anwendung decodiert. Wenn es in die Datenbank geschrieben wird, soll die Zuordnung dort behandelt die char-to-UTF-8-Codierung.

Um die richtige Codierung zu erhalten, entweder den Webserver sagen, dass Sie nur akzeptieren, sagen wir, UTF-8 und dann ist das, was Sie (hoffentlich) immer erhalten, da nur etwa jeder UTF-8 liest (oder man könnte es versuchen mit ISO-8859-1); oder verwenden Sie .info die Codierung Name des Stroms zu inspizieren zurückgegeben.

Siehe urllib2 - The Missing Manual und Kurzübersicht über HTTP-Header .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top