Conversion de caracteres accentues en ces memes caracteres non accentues
11 réponses
Frédéric Momméja
Bonjour à tous,
j'aimerais savoir si l'un d'entre vous connaît un module ou une manière
élégante qui permette de transformer les caractères accentués d'une
phrase en leur équivalent non accentué ?
Par exemple : « Vous êtes extrêmement sympas de m'avoir dépanné »
deviendrait : « Vous etes extremement sympas de m'avoir depanne »
Pour l'instant, j'utilise un dictionnaire...
Le but est de transformer des titres de chapitre en URLs pour au final
avoir : « Vous_etes_extremement_sympas_de_m_avoir_depanne »
(virer les espaces et les apostrophes, je sais faire).
J'ai mis le temps, mais j'ai trouvé une méthode qui n'a pas besoin de lister tous les caractères. Elle utilise le module unicodedata:
from unicodedata import decomposition s = u"Vous êtes extrêmement sympas de m'avoir dépanné" "".join([chr(int((decomposition(c) or hex(ord(c))).split()[0],16)) for c in s])
C'est peut-être plus clair comme ceci:
from unicodedata import decomposition def enleveAccent(car): deco = decomposition(car) if deco: return chr( int( deco.split()[0] ,16) ) else: return car
s = u"Vous êtes extrêmement sympas de m'avoir dépanné" print "".join([enleveAccent(c) for c in s])
Superbe ! ;) Merci.
-- Frédéric Momméja
Amaury écrivait le 29/06/05 19:34 :
J'ai mis le temps, mais j'ai trouvé une méthode qui n'a pas besoin de
lister tous les caractères. Elle utilise le module unicodedata:
from unicodedata import decomposition
s = u"Vous êtes extrêmement sympas de m'avoir dépanné"
"".join([chr(int((decomposition(c) or hex(ord(c))).split()[0],16))
for c in s])
C'est peut-être plus clair comme ceci:
from unicodedata import decomposition
def enleveAccent(car):
deco = decomposition(car)
if deco:
return chr( int( deco.split()[0] ,16) )
else:
return car
s = u"Vous êtes extrêmement sympas de m'avoir dépanné"
print "".join([enleveAccent(c) for c in s])
J'ai mis le temps, mais j'ai trouvé une méthode qui n'a pas besoin de lister tous les caractères. Elle utilise le module unicodedata:
from unicodedata import decomposition s = u"Vous êtes extrêmement sympas de m'avoir dépanné" "".join([chr(int((decomposition(c) or hex(ord(c))).split()[0],16)) for c in s])
C'est peut-être plus clair comme ceci:
from unicodedata import decomposition def enleveAccent(car): deco = decomposition(car) if deco: return chr( int( deco.split()[0] ,16) ) else: return car
s = u"Vous êtes extrêmement sympas de m'avoir dépanné" print "".join([enleveAccent(c) for c in s])