Ich habe gerade diese Antwort im Web gefunden:
import unicodedata
def remove_accents(input_str):
nfkd_form = unicodedata.normalize('NFKD', input_str)
only_ascii = nfkd_form.encode('ASCII', 'ignore')
return only_ascii
Es funktioniert gut (zum Beispiel für Französisch), aber ich denke, der zweite Schritt (Entfernen der Akzente) könnte besser gehandhabt werden als das Löschen der Nicht-ASCII-Zeichen, da dies für einige Sprachen (z. B. Griechisch) fehlschlägt. Die beste Lösung wäre wahrscheinlich, die Unicode-Zeichen, die als diakritisch gekennzeichnet sind, explizit zu entfernen.
Bearbeiten : das macht den Trick:
import unicodedata
def remove_accents(input_str):
nfkd_form = unicodedata.normalize('NFKD', input_str)
return u"".join([c for c in nfkd_form if not unicodedata.combining(c)])
unicodedata.combining(c)
wird true zurückgeben, wenn das Zeichen c
mit dem vorhergehenden Zeichen kombiniert werden kann, dh hauptsächlich, wenn es diakritisch ist.
Bearbeiten 2 : remove_accents
Erwartet eine Unicode- Zeichenfolge, keine Byte-Zeichenfolge. Wenn Sie eine Byte-Zeichenfolge haben, müssen Sie diese in eine Unicode-Zeichenfolge wie folgt dekodieren:
encoding = "utf-8" # or iso-8859-15, or cp1252, or whatever encoding you use
byte_string = b"café" # or simply "café" before python 3.
unicode_string = byte_string.decode(encoding)