Seite 1 von 1

Umlaute in Form von \xc3 ersetzen

Verfasst: Samstag 2. Mai 2020, 18:50
von ubik
Hallo,

ich habe mir ein kleines Skript gebastelt, das eine Webseite holt:

Code: Alles auswählen

# Get the webpage by url
def getwebpage(self, url):
        page = urllib.request.urlopen(url).read()

        return page
Nun habe ich ein Problem:

Im String page kommen Umlaute vor, wie beispielsweise:

Code: Alles auswählen

title="Wikipedia:\xc3\x9cber Wikipedia">Wikipedia</a> ist ein Projekt zum Aufbau einer
.

Diese werden aber nicht richtig im String dargestellt.

Wie kann man die Strings denn ersetzen, sodass statt "\xc3\x9cber Wikipedia" "über Wikipedia" dargestellt wird? Also quasi \xc3\x9c wird durch "ü" ersetzt.

Ich möchte allerdings kein einfaches Ersetzen mit .replace() haben, sondern, dass alle Umlaute und Sonderzeichen durch eine Funktion richtig dargestellt werden.

Danke :-)

Re: Umlaute in Form von \xc3 ersetzen

Verfasst: Samstag 2. Mai 2020, 20:56
von Sirius3
urlopen liefert Bytes, Text ist aber encodiert, Du mußt also die Bytes decodieren, um Text zu erhalten. HTTP-Antworten liefern im Header mit, welches Encoding benutzt werden muß. Das selbst zu programmieren ist aber umständlich, so dass man statt dessen auf fertige Pakete zurückgreift, hier das requests-Paket.

Code: Alles auswählen

import requests
def getwebpage(url):
    return requests.get(url).text
Das `self` war zu viel, denn die Funktion braucht das self gar nicht, ist also gar keine Methode, gehört also auch nicht in eine Klasse.

Re: Umlaute in Form von \xc3 ersetzen

Verfasst: Samstag 2. Mai 2020, 21:05
von __blackjack__
Wobei man in beiden Fällen eventuell auch den Inhalt einer Fehlerseite von der Funktion zurück bekommt. Das sollte man vielleicht testen/behandeln.