Verwenden von unicodedata.normalize in Python 2.7

7

Noch einmal, ich bin sehr verwirrt mit einer Unicode-Frage. Ich kann nicht herausfinden, wie man unicodedata.normalize erfolgreich verwendet, um Nicht-ASCII-Zeichen wie erwartet zu konvertieren. Zum Beispiel möchte ich die Zeichenfolge

konvertieren %Vor%

An

%Vor%

Ich bin mir ziemlich sicher, dass UnicodeData.Normalize der Weg ist, dies zu tun, aber ich kann es nicht zum Laufen bringen. Es lässt nur die Zeichenfolge unverändert.

%Vor%

Was mache ich falsch?

    
dpitch40 17.10.2012, 22:57
quelle

3 Antworten

6

Ihr Problem scheint nicht mit Python zu tun zu haben, aber das Zeichen, das Sie zu zerlegen versuchen (u '\ u0153' - 'œ'), ist keine Komposition selbst.

Überprüfen Sie, ob Ihr Code mit einer Zeichenfolge arbeitet, die normale zusammengesetzte Zeichen wie "ç" und "ã" enthält:

%Vor%

Und dann, wenn Sie die Unicode-Referenz für beide Zeichen (Ihr und c + cedila) überprüfen, werden Sie sehen, dass das spätere eine "Zerlegungs" -Spezifikation hat, die ersteren fehlt:

Ссылка
Ссылка

Es ist "œ" nicht formal gleichbedeutend mit "oe" - (zumindest nicht für die Leute, die diesen Unicode-Teil definiert haben) - also, der Weg, Text zu normalisieren, der dies enthält, ist eine manuelle Ersetzung der char für die Sequenz mit unicode.replace - so hacky wie es klingt.

    
jsbueno 17.10.2012, 23:32
quelle
20

Sie könnten versuchen Unidecode :

%Vor%     
jfs 18.10.2012 04:28
quelle
3

Wie Jsbueno sagt, haben einige Buchstaben einfach keine Kompatibilitätszerlegung.

Sie können die Unicode CLDR Latein-ASCII-Transformation verwenden, um eine Zuordnung von manuellen Ersetzungen.

    
dan04 18.10.2012 04:10
quelle