Heim >Backend-Entwicklung >Python-Tutorial >Wie kann das „unicodedata'-Modul von Python Unicode-Strings für eine konsistente Manipulation normalisieren?
Unicode normalisieren
Das Unicodedata-Modul von Python bietet Methoden zum Bearbeiten von Unicode-Zeichenfolgen. Eine häufige Aufgabe besteht darin, eine Zeichenfolge so zu normalisieren, dass sie die einfachste mögliche Darstellung verwendet und doppelte Unicode-Entitäten eliminiert.
Problem
Betrachten Sie das folgende Beispiel:
import unicodedata char = "á" len(char) [unicodedata.name(c) for c in char]
Das Ergebnis zeigt, dass die Zeichenfolge „á“ auf ihre einfachste Form normalisiert ist: „LATEINISCHER KLEINBUCHSTABE A MIT AKUTE“. Wenn wir jedoch die Reihenfolge der Zeichen umkehren:
char = "á" len(char) [unicodedata.name(c) for c in char]
Das Ergebnis wird in zwei separate Zeichen zerlegt: „LATIN SMALL LETTER A“ und „COMBINING ACUTE ACCENT“. Dieses Verhalten ist inkonsistent und kann die Zeichenfolgenmanipulation erschweren.
Lösung
Um eine Unicode-Zeichenfolge konsistent zu normalisieren, verwenden Sie die Funktion .normalize() aus dem Unicodedata-Modul. Das NFC-Formular (Normal Form Composed) gibt zusammengesetzte Zeichen zurück, während das NFD-Formular (Normal Form Decomposed) zerlegte, kombinierte Zeichen liefert.
Zum Beispiel mit der gleichen Unicode-Kombination wie oben:
print(ascii(unicodedata.normalize('NFC', '\u0061\u0301'))) print(ascii(unicodedata.normalize('NFD', '\u00e1')))
Die Ausgabe zeigt, dass das NFC-Formular das zusammengesetzte Zeichen „é“ erzeugt, während das NFD-Formular die zerlegte Sequenz erzeugt „au0301“.
Zusätzliche Formen, NFKC und NFKD, befassen sich mit Kompatibilitätscodepunkten. Diese Formen ersetzen Kompatibilitätszeichen durch ihre kanonische Form. Zum Beispiel:
unicodedata.normalize('NFKC', '\u2167')
Transformiert den Codepunkt der römischen Zahl Acht (U 2167) in die ASCII-Sequenz „VIII“.
Beachten Sie, dass nicht alle Transformationen kommutativ sind. Das Zerlegen eines zusammengesetzten Zeichens und das anschließende erneute Zusammensetzen führt möglicherweise nicht zur ursprünglichen Reihenfolge. Der Unicode-Standard führt eine Liste von Ausnahmen für dieses Verhalten.
Das obige ist der detaillierte Inhalt vonWie kann das „unicodedata'-Modul von Python Unicode-Strings für eine konsistente Manipulation normalisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!