Normalisation des pythons et des caractères

Bonjour Je récupère des données utf8 basées sur un texte à partir d'une source étrangère qui contient des caractères spéciaux tels que u"ıöüç" alors que je veux les normaliser en anglais comme "ıöüç" ->"iouc" . Quelle serait la meilleure façon d'atteindre cet objectif ?

16
demandé sur hippietrail 2010-11-12 10:52:02

4 réponses

je recommande d'utiliser unidecode module:

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

notez comment vous lui donnez une chaîne unicode et qu'elle produit une chaîne byte. La sortie est garantie D'être ASCII.

36
répondu Constantin 2010-11-12 08:28:33

cela dépend jusqu'où vous voulez aller dans la translittération du résultat. Si vous voulez tout convertir en ASCII (αβγabg)unidecode est le chemin à parcourir.

si vous voulez simplement supprimer les accents des lettres accentuées, alors vous pouvez essayer de décomposer votre chaîne en utilisant la forme de normalisation NFKD (ceci convertit la lettre accentuée á pour une lettre simple a suivi de U+0301 COMBINING ACUTE ACCENT), puis en écartant les accents (qui appartiennent à la classe de caractères UnicodeMn - "Mark, nonpacing").

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')
5
répondu Gareth Rees 2010-11-12 11:41:27

la façon la plus simple que j'ai trouvée:

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

1
répondu Sylvain 2017-04-12 20:54:04
import unicodedata
unicodedata.normalize()

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

0
répondu soulseekah 2010-11-12 08:05:52