Bu yanıtı Web’de buldum:
import unicodedata
def remove_accents(input_str):
nfkd_form = unicodedata.normalize('NFKD', input_str)
only_ascii = nfkd_form.encode('ASCII', 'ignore')
return only_ascii
İyi çalışıyor (örneğin Fransızca için), ancak sanırım ikinci adım (aksanları kaldırmak) ASCII olmayan karakterleri bırakmaktan daha iyi işlenebilir, çünkü bu bazı diller için başarısız olacaktır (örneğin, Yunanca). En iyi çözüm muhtemelen aksan olarak etiketlenmiş unicode karakterleri açıkça kaldırmak olacaktır.
Düzenleme : bu hile yapar:
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)
karakter c
önceki karakterle birleştirilebiliyorsa true değerini döndürür , yani esasen bir aksan işaretiyse.
Edit 2 : bir bayt dizesi değil, remove_accents
bir unicode dizesi bekler . Bir bayt dizeniz varsa, bunun gibi bir unicode dizgiye kodunu çözmeniz gerekir:
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)