CONVERTIR UNE CHAÎNE DE CARACTÈRES EN CHAÎNE SANS ACCENT

tmcuh Messages postés 458 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 18 avril 2009 - 18 oct. 2005 à 11:41
eagledark Messages postés 18 Date d'inscription mercredi 15 décembre 2010 Statut Membre Dernière intervention 17 janvier 2013 - 6 mai 2011 à 22:14
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/34235-convertir-une-chaine-de-caracteres-en-chaine-sans-accent

eagledark Messages postés 18 Date d'inscription mercredi 15 décembre 2010 Statut Membre Dernière intervention 17 janvier 2013 2
6 mai 2011 à 22:14
Bonjour,

Le code n'est pas mal et bien réfléchi, merci.

++
dymsbess Messages postés 56 Date d'inscription mercredi 29 septembre 2004 Statut Membre Dernière intervention 4 janvier 2010 1
24 févr. 2011 à 17:50
JacquesLebrun Messages postés 1 Date d'inscription mercredi 16 janvier 2008 Statut Membre Dernière intervention 26 juillet 2009
26 juil. 2009 à 14:39
J'ai trouvé un truc encore plus facile et rapide. On doit d'abord convertir du codepage de réception à un codepage intermédiaire à un octet (UTF-8), ensuite on utilise le seule codepage qui "élimine" les accents en les remplaçant par une lettre non-accentuée plutôt qu'un "?" (ISO-8859-8 = Hébreu):

Nom = {variable accentuée provenant d'un fichier, etc}
Dim Bytes() As Byte
' Remplacer "ISO-8859-1" par le codepage des données reçues
Bytes = System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(Nom)
Nom = System.Text.Encoding.UTF8.GetString(Bytes)
' Remplacer les caractères accentués par l'équivalent sans accents à l'aide du codepage hébreu
Bytes = System.Text.Encoding.GetEncoding("ISO-8859-8").GetBytes(Nom)
Nom = System.Text.Encoding.ASCII.GetString(Bytes).ToUpper
neodivx Messages postés 1 Date d'inscription dimanche 8 février 2004 Statut Membre Dernière intervention 25 août 2008
25 août 2008 à 12:17
pour faire plus simple, voici un petit code encore plus rapide.

string AccentFrom = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñÇç";
string AccentTo = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNnCc";

for (int i1=0;i1<AccentFrom.Length;i1++)
{
from = from.Replace(AccentFrom[i1], AccentTo[i1]);
}
return from;

concernant le code utilisant la fonction FormaterText, je vous la déconseille. Essayez betement de passer la ligne: je vais à l'université: vous verrez que le ' est retourné comme un ? ( j'ai essayé avec le code 1250,1251,1252 )
cs_lmamine Messages postés 10 Date d'inscription dimanche 1 septembre 2002 Statut Membre Dernière intervention 9 mai 2006
9 mai 2006 à 15:27
string FormaterText(string text)
{
byte[] aOctets = System.Text.Encoding.GetEncoding(1251).GetBytes(text);
string sEnleverAccents = System.Text.Encoding.ASCII.GetString(aOctets);//.ToLower();
return sEnleverAccents;
}
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
18 oct. 2005 à 15:56
On peut aussi passer par l'encodage 8 bits, mais cela ne fonctionnera pas pour certains caractères unicodes :
www.vbfrance.com/code.aspx?ID=25946
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
18 oct. 2005 à 14:44
L'idée est bonne mais tu peux améliorer ton code, les chaines sont indexables comme un tableau, et la méthode "Replace" accepte des arguments de type char.
tmcuh Messages postés 458 Date d'inscription dimanche 22 décembre 2002 Statut Membre Dernière intervention 18 avril 2009
18 oct. 2005 à 11:41
Bonne adaptation. J'avais posté un truc semblable il y a un bon moment, c'était encore en vb (http://vbfrance.com/forum.v2.aspx?ID=270777)
Rejoignez-nous