[fonction] pour convertir les accents et choses non ascii ?

pour convertir les accents et choses non ascii ? [fonction] - Python - Programmation

Marsh Posté le 10-07-2007 à 16:34:51    

salut
je cherche une fonction ou quoi que ce soit pour virer/convertir les accents et characteres non ascii, par exemple:
 
bébé ==> bebe
ñoqui ==> noqui
 
etc....

Reply

Marsh Posté le 10-07-2007 à 16:34:51   

Reply

Marsh Posté le 01-08-2007 à 13:01:29    

Je ne sais pas si ça existe déjà mais c'est rapide à faire, avec un petit tableau de 256 éléments par exemple.

Reply

Marsh Posté le 01-08-2007 à 14:24:28    

qq chose dans ce goût là :  
strtr($Chaine, "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",                     "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn"
);


Message édité par rufo le 01-08-2007 à 14:24:38
Reply

Marsh Posté le 01-08-2007 à 20:52:51    

Oui si ensuite tu n'oublies pas de nettoyer le reste. Et en espérant que tu n'aies pas plusieurs pages de codes différentes (dos, mac, windows, ...).

Reply

Marsh Posté le 02-08-2007 à 09:14:01    

ben pour les autres (les autres caractères qui ne sont pas des caractères accentués), je pense qu'on peut que les virer => une boucle sur chaque caractère de la chaîne et on gare que les caractères dont le code ascii [0 ; 255].

Reply

Marsh Posté le 02-08-2007 à 10:58:44    

Oui, par exemple si tu trouves un code ascii 257 :lol:

Reply

Marsh Posté le 02-08-2007 à 11:30:01    

je pensais au traitement des caractères en ISO-8859-1, UTF-8...

Reply

Marsh Posté le 16-08-2007 à 20:57:16    

j'ai un code ici qui a fonctionne:
 

Code :
  1. def giveGoodName(oldvalue):
  2.         # first strip accents and stuff
  3.         s = oldvalue.decode("utf-8" )
  4.         try:
  5.                 s = s.translate(noaccents.unaccented_map())
  6.         except:
  7.                 ns = ""
  8.                 for c in s:
  9.                         if ((ord(c) >= 65 and ord(c) < 91) or (ord(c) >= 97 and ord(c) < 123) or (c == " " )):
  10.                                 ns = ns + c
  11.                 s = ns
  12.         # then go uppercase
  13.         s = s.upper()
  14.         # then strip all non alfanum
  15.         out = ""
  16.         for c in s:
  17.                 if ((ord(c) >= 65) and (ord(c) < 91)) or (c == " " ):
  18.                         #print "c = "+ c + "; ord(c) = "+str(ord(c))
  19.                         out = out + c
  20.         return out


 
avec aussi ca:
 
puis noaccents.py
 

Code :
  1. # $Id$
  2. # -*- coding: latin-1 -*-
  3. # use a dynamically populated translation dictionary to remove accents
  4. # from a string
  5. import unicodedata, sys
  6. CHAR_REPLACEMENT = {
  7.         # latin-1 characters that don't have a unicode decomposition
  8.         0xc6: u"AE", # LATIN CAPITAL LETTER AE
  9.         0xd0: u"D",  # LATIN CAPITAL LETTER ETH
  10.         0xd8: u"OE", # LATIN CAPITAL LETTER O WITH STROKE
  11.         0xde: u"Th", # LATIN CAPITAL LETTER THORN
  12.         0xdf: u"ss", # LATIN SMALL LETTER SHARP S
  13.         0xe6: u"ae", # LATIN SMALL LETTER AE
  14.         0xf0: u"d",  # LATIN SMALL LETTER ETH
  15.         0xf8: u"oe", # LATIN SMALL LETTER O WITH STROKE
  16.         0xfe: u"th", # LATIN SMALL LETTER THORN
  17.         }
  18. ##
  19. # Translation dictionary.  Translation entries are added to this
  20. # dictionary as needed.
  21. class unaccented_map(dict):
  22.         ##
  23.         # Maps a unicode character code (the key) to a replacement code
  24.         # (either a character code or a unicode string).
  25.         def mapchar(self, key):
  26.                 ch = self.get(key)
  27.                 if ch is not None:
  28.                         return ch
  29.                 de = unicodedata.decomposition(unichr(key))
  30.                 if de:
  31.                         try:
  32.                                 ch = int(de.split(None, 1)[0], 16)
  33.                         except (IndexError, ValueError):
  34.                                 ch = key
  35.                 else:
  36.                         ch = CHAR_REPLACEMENT.get(key, key)
  37.                 self[key] = ch
  38.                 return ch
  39.         if sys.version >= "2.5":
  40.                 # use __missing__ where available
  41.                 __missing__ = mapchar
  42.         else:
  43.                 # otherwise, use standard __getitem__ hook (this is slower,
  44.                 # since it's called for each character)
  45.                 __getitem__ = mapchar


Message édité par k666 le 16-08-2007 à 21:02:06
Reply

Marsh Posté le 21-08-2007 à 18:29:14    

Ma petite contribution pour virer les accents, en 2 lignes (trouvé sur le Web quelquepart je ne sais plus où) :
 

Code :
  1. import unicodedata
  2. print unicodedata.normalize("NFKD", u"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ" ).encode("ascii", "ignore" )


 
Résultat :

AAAAAAaaaaaaOOOOOoooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn


Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed