Umlaute in Form von \xc3 ersetzen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
ubik
User
Beiträge: 1
Registriert: Samstag 2. Mai 2020, 18:43

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 :-)
Sirius3
User
Beiträge: 17755
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Benutzeravatar
__blackjack__
User
Beiträge: 13118
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wobei man in beiden Fällen eventuell auch den Inhalt einer Fehlerseite von der Funktion zurück bekommt. Das sollte man vielleicht testen/behandeln.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten