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
これは問題なく動作しますが (たとえば、フランス語の場合)、2 番目のステップ (アクセントの削除) は、一部の言語 (たとえばギリシャ語) では失敗するため、非 ASCII 文字を削除するよりも適切に処理できると思います。おそらく最善の解決策は、分音符号としてタグ付けされた Unicode 文字を明示的に削除することです。
編集:これはトリックを行います:
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)
c
文字を前の文字と組み合わせることができる場合、つまり主に分音符号の場合はtrue を返します。
編集 2 :バイト文字列ではなく、remove_accents
Unicode文字列が必要です。バイト文字列がある場合は、次のように Unicode 文字列にデコードする必要があります。
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)