Zum Hauptinhalt springen

Prozent-Codierung von Parametern

Teile der X API, insbesondere jene, die mit OAuth-Signaturen arbeiten, erfordern, dass Zeichenketten gemäß RFC 3986, Abschnitt 2.1 codiert werden. Da viele Implementierungen von URL-Codierungsalgorithmen nicht vollständig mit RFC 3986 kompatibel sind, führen fehlerhafte Codierungen häufig zu OAuth-Signaturfehlern. Aus diesem Grund wird auf dieser Seite der genau zu verwendende Signaturalgorithmus beschrieben. Diese Seite behandelt den in RFC 3986, Abschnitt 2.1 beschriebenen URL-Codierungsprozess. Bei Unklarheiten oder Widersprüchen mit diesem Dokument empfehlen wir, die Spezifikation zu konsultieren.  

Kodieren einer Zeichenkette

Der folgende Algorithmus geht davon aus, dass Sie eine Zeichenkette SRC kodieren, indem Sie ihre Werte Byte für Byte in eine Zeichenkette DST kopieren. Schritt 1: Solange SRC ungelesene Bytes enthält, lesen Sie das nächste Byte (8 Bit) aus SRC. In der Regel entspricht dies einem Zeichen, aber bei Kodierungen, in denen ein Zeichen mehr als ein Byte umfassen kann (wie UTF-8), lesen Sie nur das erste Byte. Schritt 2: Prüfen Sie, ob das gelesene Byte einem der folgenden ASCII-Äquivalente entspricht. Die folgende Tabelle ist zur besseren Lesbarkeit in Zeilen aufgeteilt. Sie müssen jedoch nur feststellen, ob das gelesene Byte überhaupt in der Tabelle vorkommt, nicht in welcher Zeile.
NameASCII charactersEquivalent byte values
Ziffern‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39
Großbuchstaben‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘I’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’, ‘O’, ‘P’, ‘Q’, ‘R’, ‘S’, ‘T’, ‘U’, ‘V’, ‘W’, ‘X’, ‘Y’, ‘Z’0x41, 0x42, 0x43, 0x44, 0x45,0x46, 0x47, 0x48, 0x49, 0x4A, 0x4B,0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51,0x52, 0x53, 0x54, 0x55, 0x56, 0x57,0x58, 0x59, 0x5A
Kleinbuchstaben‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’, ‘j’, ‘k’, ‘l’, ‘m’, ‘n’, ‘o’, ‘p’, ‘q’, ‘r’, ‘s’, ‘t’, ‘u’, ‘v’, ‘w’, ‘x’, ‘y’, ‘z’0x61, 0x62, 0x63, 0x64, 0x65,0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B,0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71,0x72, 0x73, 0x74, 0x75, 0x76, 0x77,0x78, 0x79, 0x7A
Reservierte Zeichen‘-‘, ‘.’, ‘_’, ‘~’0x2D, 0x2E, 0x5F, 0x7E
Schritt 2b: Wenn das Byte nicht in der obigen Tabelle aufgeführt ist, fahren Sie fort. Jeder andere Wert muss kodiert werden. Schritt 2a: Wenn das Byte in der obigen Tabelle aufgeführt ist, kopieren Sie es in DST und gehen Sie zurück zu Schritt 1. Zeichen, die in der obigen Tabelle aufgeführt sind, müssen nicht maskiert werden, daher kopieren Sie das Byte direkt. Schritt 3: Schreiben Sie das Zeichen ‘%’ nach DST. Das Prozentzeichen ‘%’ (bzw. 0x25 in Hex und 00100101 in Binär) zeigt an, dass die nächsten zwei Zeichen ein kodiertes Byte darstellen. Schritt 4: Schreiben Sie zwei Zeichen, die den großgeschriebenen, ASCII-kodierten Hexwert des aktuellen Bytes darstellen, nach DST. Das ist etwas verwirrend, daher ein Beispiel: Angenommen, das aktuelle Byte ist 0xE6 (11100110 in Binär). Dies entspricht dem UTF-8-kodierten Wert von ‘æ’. Um diesen Wert zu kodieren, schreiben Sie das Zeichen ‘E’ (0x45, aus der obigen Tabelle) und anschließend das Zeichen ‘6’ (0x36) nach DST. Die letzten drei geschriebenen Zeichen sollten „%E6“ gewesen sein. Beachten Sie, dass Sie, wenn Sie einen Buchstaben wie A, B, C, D, E oder F schreiben, den Großbuchstaben verwenden müssen. Schritt 5: Kehren Sie zu Schritt 1 zurück. Fahren Sie fort, bis der gesamte Inhalt von SRC nach DST kopiert wurde.  

Beispiele

Die folgenden Beispiele können Ihnen beim Vergleich mit der Ausgabe Ihres eigenen Codes helfen. Betrachten Sie alle Abweichungen als Fehler. Als „+“ kodierte Leerzeichen sind ein Beispiel für eine fehlerhafte Codierung.
Ursprüngliche ZeichenfolgeCodierte Zeichenfolge
Ladies + GentlemenLadies%20%2B%20Gentlemen
An encoded string!An%20encoded%20string%21
Dogs, Cats & MiceDogs%2C%20Cats%20%26%20Mice
%E2%98%83
I