Convertir une chaîne de caractères en chaîne sans accent

Soyez le premier à donner votre avis sur cette source.

Snippet vu 48 765 fois - Téléchargée 26 fois

Contenu du snippet

Fonction permettant de convertir une chaîne de caractères passée en paramètre en chaîne de caractères sans accent.

Source / Exemple :


/// <summary>
/// Fonction de conversion de chaîne accentué en chaîne sans accent
/// </summary>
/// <param name="chaine">La chaine à convertir</param>
/// <returns>string</returns>
private string convertirChaineSansAccent(string chaine) 
{
	// Déclaration de variables
	string accent = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñÇç";
	string sansAccent = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNnCc";

	// Conversion des chaines en tableaux de caractères
	char[] tableauSansAccent = sansAccent.ToCharArray();
	char[] tableauAccent = accent.ToCharArray();

	// Pour chaque accent
	for(int i=0; i<accent.Length; i++) 
	{
		// Remplacement de l'accent par son équivalent sans accent dans la chaîne de caractères
		chaine = chaine.Replace(tableauAccent[i].ToString(), tableauSansAccent[i].ToString());
	}

	// Retour du résultat
	return chaine;
}

A voir également

Ajouter un commentaire

Commentaires

Messages postés
18
Date d'inscription
mercredi 15 décembre 2010
Statut
Membre
Dernière intervention
17 janvier 2013
2
Bonjour,

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

++
Messages postés
56
Date d'inscription
mercredi 29 septembre 2004
Statut
Membre
Dernière intervention
4 janvier 2010
1
Messages postés
1
Date d'inscription
mercredi 16 janvier 2008
Statut
Membre
Dernière intervention
26 juillet 2009

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
Messages postés
1
Date d'inscription
dimanche 8 février 2004
Statut
Membre
Dernière intervention
25 août 2008

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 )
Messages postés
10
Date d'inscription
dimanche 1 septembre 2002
Statut
Membre
Dernière intervention
9 mai 2006

string FormaterText(string text)
{
byte[] aOctets = System.Text.Encoding.GetEncoding(1251).GetBytes(text);
string sEnleverAccents = System.Text.Encoding.ASCII.GetString(aOctets);//.ToLower();
return sEnleverAccents;
}
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.