python django utf-8 diacritics transliteration

Python y normalización de personajes.



django utf-8 (4)

La forma más sencilla que encontré:

unicodedata.normalize(''NFKD'', s).encode("ascii", "ignore")

Hola, recupero datos basados ​​en texto de utf8 de una fuente extranjera que contiene caracteres especiales como u"ıöüç" mientras que quiero normalizarlos al inglés como "ıöüç" -> "iouc" . ¿Cuál sería la mejor manera de lograr esto?


Recomiendo usar el módulo Unidecode :

>>> from unidecode import unidecode >>> unidecode(u''ıöüç'') ''iouc''

Observe cómo lo alimenta con una cadena Unicode y genera una cadena de bytes. La salida está garantizada para ser ASCII.


Todo depende de lo lejos que quieras llegar para transliterar el resultado. Si desea convertir todo a lo largo del camino a ASCII ( αβγ a abg ), entonces unidecode es el camino a seguir.

Si solo desea eliminar los acentos de las letras acentuadas, intente descomponer su cadena usando la forma de normalización NFKD (esto convierte la letra acentuada á en una letra simple a seguida de U+0301 COMBINING ACUTE ACCENT ) y luego descartando los acentos (que pertenecen a la clase de caracteres Unicode Mn - "Marca, sin espacios").

import unicodedata def remove_nonspacing_marks(s): "Decompose the unicode string s and remove non-spacing marks." return ''''.join(c for c in unicodedata.normalize(''NFKD'', s) if unicodedata.category(c) != ''Mn'')