Hola, recupero datos basados en texto utf8 de una fuente extranjera que contiene caracteres especiales como u"ıöüç"
mientras quiero normalizarlos en 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 una cadena Unicode y emite una cadena de bytes. La salida está garantizada para ser ASCII.
Todo depende de lo lejos que quieras llegar transliterando el resultado. Si desea convertir todo en ASCII ( αβγ
a abg
), entonces unidecode
es el camino a seguir.
Si solo quieres eliminar los acentos de las letras acentuadas, puedes intentar descomponer tu cadena usando la forma de normalización NFKD (esto convierte la letra a a a una letra simple a
seguida de U+0301 COMBINING ACUTE ACCENT
) y luego descartar los acentos (que pertenecen a la clase de caracteres Unicode Mn
– “Marcar, no espaciar”).
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')
La forma más sencilla que encontré:
unicodedata.normalize('NFKD', s).encode("ascii", "ignore")
import unicodedata unicodedata.normalize()