Saya baru saja menemukan jawaban ini di Web:
import unicodedata
def remove_accents(input_str):
nfkd_form = unicodedata.normalize('NFKD', input_str)
only_ascii = nfkd_form.encode('ASCII', 'ignore')
return only_ascii
Ini berfungsi dengan baik (untuk Perancis, misalnya), tapi saya pikir langkah kedua (menghapus aksen) dapat ditangani lebih baik daripada menjatuhkan karakter non-ASCII, karena ini akan gagal untuk beberapa bahasa (Yunani, misalnya). Solusi terbaik mungkin akan secara eksplisit menghapus karakter unicode yang ditandai sebagai diakritik.
Sunting : ini berguna:
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)
akan mengembalikan true jika karakter c
dapat dikombinasikan dengan karakter sebelumnya, terutama jika itu diakritik.
Sunting 2 : remove_accents
mengharapkan string unicode , bukan string byte. Jika Anda memiliki string byte, maka Anda harus mendekodekannya menjadi string unicode seperti ini:
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)