Python y normalización de caracteres

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() 

http://docs.python.org/library/unicodedata.html

    Intereting Posts