Enlever les accents

Soyez le premier à donner votre avis sur cette source.

Snippet vu 19 539 fois - Téléchargée 33 fois

Contenu du snippet

Cette fonction est utile pour indexer des documents sans les accents. Les lettres collées comme oe de coeur par exemple sont converties en ?, donc cette fonction n'est pas suffisante si vous avez besoin d'afficher le résultat de la conversion.

Source / Exemple :


Private Function sEnleverAccents$(ByVal sChaine$)

    ' Enlever les accents et convertir en minuscules
    ' cœur est converti en c?ur

    ' Codepage 1241 = "windows-1251" = cyrillic
    ' Tableau de caractères sur 8 bit
    Dim aOctets As Byte() = System.Text.Encoding.GetEncoding(1251).GetBytes(sChaine)
    ' Chaîne de caractères sur 7 bit
    sEnleverAccents = System.Text.Encoding.ASCII.GetString(aOctets).ToLower

End Function

A voir également

Ajouter un commentaire Commentaires
Messages postés
1221
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018

Pour VB6 voir ici : www.vbfrance.com/code.aspx?ID=33666
Messages postés
1221
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018

Voici une mise en oeuvre de cette solution :

Dim aOctets As Byte() = GetEncoding("iso-8859-8").GetBytes(sChaine)
sEnleverAccents = GetEncoding(1252).GetString(aOctets)

Const sEncodageIso8859_15$ = "iso-8859-15"
' Frédéric François, c'ur
' iso-8859-8 -> windows-1252 : Frederic Francois, cour ' Meilleure solution
' iso-8859-15 -> windows-1252 : Frédéric François, c½ur ' Utile pour détecter <>
' windows-1251 -> windows-1252 : Frederic Francois, c'ur ' Ancienne solution

' Détection des caractères propres à iso-8859-15 : ¤ ¦ ¨ ´ ¸ ¼ ½ ¾ ? ? ? ? ? ? ? ?
' http://fr.wikipedia.org/wiki/ISO_8859-15
If String.Compare( _
GetEncoding(sEncodageIso8859_15).GetString( _
GetEncoding(1252).GetBytes(sChaine)), sChaine) = 0 Then _
Exit Function

Dim i% = 0
Dim iLen% = sChaine.Length
Dim sChaineIso$ = GetEncoding(sEncodageIso8859_15).GetString( _
GetEncoding(1252).GetBytes(sChaine))
Dim ac1, ac2, ac3 As Char()
ac1 = sChaine.ToCharArray
ac2 = sChaineIso.ToCharArray
ac3 = sEnleverAccents.ToCharArray
Dim sbDest As New StringBuilder
For i = 0 To iLen - 1
If ac1(i) <> ac2(i) Then
Select Case ac1(i) ' ¤ ¦ ¨ ´ ¸ ¼ ½ ¾ ? ? ? ? ? ? ? ?
Case "¤"c : sbDest.Append("o")
Case "¦"c : sbDest.Append("|")
Case "¨"c : sbDest.Append("..")
Case "´"c : sbDest.Append("'")
Case "¸"c : sbDest.Append(",")
Case "¼"c : sbDest.Append("1/4")
Case "½"c : sbDest.Append("1/2")
Case "¾"c : sbDest.Append("3/4")
Case "?"c : sbDest.Append("E")
Case "?"c : sbDest.Append("S")
Case "?"c : sbDest.Append("s")
Case "?"c : sbDest.Append("Z")
Case "?"c : sbDest.Append("z")
Case "?"c : sbDest.Append("oe")
Case "?"c : sbDest.Append("OE")
Case "?"c : sbDest.Append("Y")
Case Else
If bDebug Then Debug.WriteLine("?? : " & ac1(i))
End Select
Else
sbDest.Append(ac3(i))
End If
Next i
sEnleverAccents = sbDest.ToString
Messages postés
1221
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018

Il y a une meilleure solution ici :
www.codeproject.com/useritems/EncodingAccents.asp
Messages postés
8
Date d'inscription
lundi 31 décembre 2001
Statut
Membre
Dernière intervention
13 septembre 2007

merci très pratique
Messages postés
1221
Date d'inscription
jeudi 23 août 2001
Statut
Membre
Dernière intervention
9 septembre 2018

c'ur (oe collé) est converti en c'ur
Afficher les 7 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.