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'')
import unicodedata
unicodedata.normalize()