fURLEncode

Früher, als das Internet noch exklusiv im amerikanischen und europäischen Sprachraum mit den lateinischen Buchstaben eingesetzt wurde, war noch alles gut. Man hatte ASCII als Zeichenstandard definiert, jeder wusste damit umzugehen und niemand hatte Probleme. Doch dann kam eines Tages (wer hätte das gedacht?!) der Rest der Welt auch auf die Idee, Computer und das Internet verwenden zu wollen. Nachdem aber nicht der Rest der Welt Lust hatte, erstmal Englisch oder eine andere europäische Sprache zu lernen, wurde die Forderung laut, doch auch Zeichen und Symbole aus anderen Sprachen verwendbar zu machen. Das war mit ASCII nicht machbar und so begann der Wald der Zeichenkodierungen zu sprießen. Heute ist er so groß, dass kaum mehr einer durchblickt, und trotzdem setzen die Internet-Protokolle zumeist noch auf ASCII auf.

Möchte man nun also beispielsweise eine arabische Wikipedia-Seite aufrufen, stellt sich die Frage, wie man arabische Zeichen über das HTTP-Protokoll überträgt, das doch eigendlich nur für ASCII gebaut war.

Dafür haben sich ein paar schlaue Köpfe etwas mehr oder minder Schlaues ausgedacht. Man repräsentiert den zu überliefernden String im entsprechenden Zeichensatz der Seite als Abfolge von Binärdaten, schreibt alle Zeichen, die vom ASCII-Standard abweichen, hexadezimal, setzt jeweils ein Prozentzeichen davor und gut ist. Auf diesem Weg werden auch anderweitig kritische Zeichen mit Sonderbedeutungen in URLs (@, &, Leerzeichen, ...) gut umschifft.

Aus einem Leerzeichen mit dem ASCII Wert 32 wird somit %20, was letztendlich dann übertragen wird.

Muss man nun beispielsweise in Python eine Internet-Seite aufrufen und die URL enthält an falscher Stelle derartige Sonderzeichen, so muss man diese escapen. Das geht mit der folgenden Funktion:

def fURLEncode(pString):
    return ''.join([ '%' + pString.encode('hex')[tNumber:tNumber + 2] for tNumber in range(0,len(pString.encode('hex')),2) ])

Tags: Python