stringprep — Internet String Preparation

Quellcode: Lib/stringprep.py


Bei der Identifizierung von Dingen (wie z. B. Hostnamen) im Internet ist es oft notwendig, diese Identifizierungen auf „Gleichheit“ zu vergleichen. Genau wie dieser Vergleich ausgeführt wird, kann vom Anwendungsbereich abhängen, z. B. ob er case-insensitiv sein soll oder nicht. Es kann auch notwendig sein, die möglichen Identifizierungen einzuschränken, um nur Identifizierungen zuzulassen, die aus „druckbaren“ Zeichen bestehen.

RFC 3454 definiert ein Verfahren zum „Vorbereiten“ von Unicode-Strings in Internetprotokollen. Bevor Strings über das Netz gesendet werden, werden sie mit dem Vorbereitungsverfahren verarbeitet, danach haben sie eine bestimmte normalisierte Form. Die RFC definiert eine Reihe von Tabellen, die zu Profilen kombiniert werden können. Jedes Profil muss definieren, welche Tabellen es verwendet und welche anderen optionalen Teile des stringprep-Verfahrens Teil des Profils sind. Ein Beispiel für ein stringprep-Profil ist nameprep, das für internationalisierte Domainnamen verwendet wird.

Das Modul stringprep stellt nur die Tabellen aus RFC 3454 bereit. Da diese Tabellen als Wörterbücher oder Listen sehr groß wären, verwendet das Modul intern die Unicode-Zeichendatenbank. Der Modulquellcode selbst wurde mit dem Dienstprogramm mkstringprep.py generiert.

Daher werden diese Tabellen als Funktionen und nicht als Datenstrukturen bereitgestellt. Es gibt zwei Arten von Tabellen in der RFC: Mengen und Abbildungen. Für eine Menge stellt stringprep die „Charakteristikfunktion“ bereit, d. h. eine Funktion, die True zurückgibt, wenn der Parameter Teil der Menge ist. Für Abbildungen stellt es die Abbildungsfunktion bereit: Gegeben den Schlüssel, gibt es den zugehörigen Wert zurück. Nachfolgend finden Sie eine Liste aller im Modul verfügbaren Funktionen.

stringprep.in_table_a1(code)

Ermittelt, ob code in Tabelle A.1 (nicht zugewiesene Codepunkte in Unicode 3.2) enthalten ist.

stringprep.in_table_b1(code)

Ermittelt, ob code in Tabelle B.1 (wird häufig auf nichts abgebildet) enthalten ist.

stringprep.map_table_b2(code)

Gibt den abgebildeten Wert für code gemäß Tabelle B.2 (Abbildung für Case-Folding mit NFKC) zurück.

stringprep.map_table_b3(code)

Gibt den abgebildeten Wert für code gemäß Tabelle B.3 (Abbildung für Case-Folding ohne Normalisierung) zurück.

stringprep.in_table_c11(code)

Ermittelt, ob code in Tabelle C.1.1 (ASCII-Leerzeichen) enthalten ist.

stringprep.in_table_c12(code)

Ermittelt, ob code in Tabelle C.1.2 (Nicht-ASCII-Leerzeichen) enthalten ist.

stringprep.in_table_c11_c12(code)

Ermittelt, ob code in Tabelle C.1 (Leerzeichen, Vereinigung von C.1.1 und C.1.2) enthalten ist.

stringprep.in_table_c21(code)

Ermittelt, ob code in Tabelle C.2.1 (ASCII-Steuerzeichen) enthalten ist.

stringprep.in_table_c22(code)

Ermittelt, ob code in Tabelle C.2.2 (Nicht-ASCII-Steuerzeichen) enthalten ist.

stringprep.in_table_c21_c22(code)

Ermittelt, ob code in Tabelle C.2 (Steuerzeichen, Vereinigung von C.2.1 und C.2.2) enthalten ist.

stringprep.in_table_c3(code)

Ermittelt, ob code in Tabelle C.3 (Privater Gebrauch) enthalten ist.

stringprep.in_table_c4(code)

Ermittelt, ob code in Tabelle C.4 (Keine Zeichen für Codepunkte) enthalten ist.

stringprep.in_table_c5(code)

Ermittelt, ob code in Tabelle C.5 (Surrogat-Codes) enthalten ist.

stringprep.in_table_c6(code)

Ermittelt, ob code in Tabelle C.6 (Nicht für Klartext geeignet) enthalten ist.

stringprep.in_table_c7(code)

Ermittelt, ob code in Tabelle C.7 (Nicht für kanonische Darstellung geeignet) enthalten ist.

stringprep.in_table_c8(code)

Ermittelt, ob code in Tabelle C.8 (Ändert Anzeigeeigenschaften oder ist veraltet) enthalten ist.

stringprep.in_table_c9(code)

Ermittelt, ob code in Tabelle C.9 (Tagging-Zeichen) enthalten ist.

stringprep.in_table_d1(code)

Ermittelt, ob code in Tabelle D.1 (Zeichen mit bidirektionaler Eigenschaft „R“ oder „AL“) enthalten ist.

stringprep.in_table_d2(code)

Ermittelt, ob code in Tabelle D.2 (Zeichen mit bidirektionaler Eigenschaft „L“) enthalten ist.