IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Supprimer les accents des lettre


Sujet :

C#

  1. #1
    Membre extrêmement actif Avatar de cortex024
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 301
    Par défaut Supprimer les accents des lettre
    Bonjour,

    pour éviter l'entrée de doublons dans une base de données, je fais une vérification entre autre sur le prenom.

    Mais le fait de mettre des accents sur les prénoms par exemple, font en sorte que ma verif foire

    Donc je voulais savoir si il existais une méthode ou une astuce pour remplacer tous les accents par les lettres "normales"

    é, è, ê, ... --> e
    à, â, ... --> a
    ...
    ...


    Merci

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Par défaut
    au lieu de "remplacer", convertis ou arrange toi pour que la collation de ta db tienne compte des caractères accentués.

    Si tu dois convertir, regarde de ce côté ci : l'UTF8 encodage classiquement utilisé notamment pour tout ce qui est manipulation XML.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Text.Encoding.UTF8

  3. #3
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Apparement StormimOn aurait donné une solution dans le poste suivant :

    http://www.developpez.net/forums/sho...d.php?t=285643

  4. #4
    Membre extrêmement actif Avatar de cortex024
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 301
    Par défaut
    Que va faire exactement le changement d'encodage en UTF8?


    beh la solution de StormimOn c'est barbare, je savais le faire aussi ce genre de truc lol...

    Mais je pensais que .NET possédait une méthode ou quelque chose tout fait pour supprimer les accents...

    Peut-être l'encodage UTF8, on va voir ce que stephane eyskens va me dire

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    1 581
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 581
    Par défaut
    Citation Envoyé par cortex024
    Que va faire exactement le changement d'encodage en UTF8?
    L'encodage UTF8 code les caractères accentués sur deux bytes au lieu d'un seul. Si tu stockes la valeur en utf8 dans la db et que tu convertis le critère de recherche en utf8 également lors de ta recherche, tu n'auras plus de problème.

    Une autre piste aussi consiste à modifier la collation de ta DB comme je l'ai mentionné dans mon intervention précédente.

    Si tu veux aussi être capable de traiter tous les auters character set (chinois, coréen, russe etc...), convertis le tout en unicode. Attention que ces conversions rajoutent évidement un overhead non négligeable.

  6. #6
    Membre extrêmement actif Avatar de cortex024
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 301
    Par défaut
    l'encodage en UTF8 nécessiterait donc un changement d'encodage dans mon application, partout ou il est possible d'entrer, afficher ou updater le nom, prenom,... en plus de faire une modification à ma base de données.
    --> donc je ne retiens pas cette possibilité pour le moment.

    Au niveau de la collation, qu'est ce exactement?

    Si je change la collation de ma db pour qu'elle tienne compte des caractères accentués, quels vont être les changements?

    je ne vois pas bien ce que cela changerait lorsque je compare une chaine de caractère avec une chaine contenue dans ma db?

    merci de m'éclairer la dessus...


    car je rapelle le problème initial, c'est que les champs noms/prenoms de ma db, lorsque je les "recherche" dans la table pour détecter les doublons, n'arrive pas à détecter ces doublons si une fois sur le prénom il y a un accent, et que sur le doublon il n'y en a pas.

  7. #7
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Je me rappelais d'un code tres court pour ca, je l'ai retrouve

  8. #8
    Membre extrêmement actif Avatar de cortex024
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 301
    Par défaut
    merci c'est parfait!

  9. #9
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Citation Envoyé par Piotrek Voir le message
    Je me rappelais d'un code tres court pour ca, je l'ai retrouve
    Je copie le code ici au cas où le lien meurt et parce que c'est quand même plus pratique :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    using System;
    using System.Text;
    using System.Globalization;
     
    //...
     
    static string RemoveDiacritics(string stIn)
    {
        string stFormD = stIn.Normalize(NormalizationForm.FormD);
        StringBuilder sb = new StringBuilder();
     
        for (int ich = 0; ich < stFormD.Length; ich++)
        {
            UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(stFormD[ich]);
            if (uc != UnicodeCategory.NonSpacingMark)
            {
                sb.Append(stFormD[ich]);
            }
        }
     
        return (sb.ToString().Normalize(NormalizationForm.FormC));
    }
    Sachez que cette méthode est incluse dans la librairie Dvp.Net : RemoveDiacritics

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 43
    Par défaut
    Citation Envoyé par Skalp Voir le message
    Je copie le code ici au cas où le lien meurt et parce que c'est quand même plus pratique :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    using System;
    using System.Text;
    using System.Globalization;
     
    //...
     
    static string RemoveDiacritics(string stIn)
    {
        string stFormD = stIn.Normalize(NormalizationForm.FormD);
        StringBuilder sb = new StringBuilder();
     
        for (int ich = 0; ich < stFormD.Length; ich++)
        {
            UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(stFormD[ich]);
            if (uc != UnicodeCategory.NonSpacingMark)
            {
                sb.Append(stFormD[ich]);
            }
        }
     
        return (sb.ToString().Normalize(NormalizationForm.FormC));
    }
    Sachez que cette méthode est incluse dans la librairie Dvp.Net : RemoveDiacritics

    Je me permets de deterrer ce post, car j'aimerai bien l'adapter en vb.net mais je patines. Votre aide serez la bienvenue, merci

  11. #11
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Il existe des convertisseurs en ligne :
    http://www.developerfusion.com/tools.../csharp-to-vb/
    http://convertisseur.developpez.com/Default.aspx

    Voilà ce que ça donne (non testé) :
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Imports System.Text
    Imports System.Globalization
     
    	Private Shared Function RemoveDiacritics(stIn As String) As String
    		Dim stFormD As String = stIn.Normalize(NormalizationForm.FormD)
    		Dim sb As New StringBuilder()
     
    		For ich As Integer = 0 To stFormD.Length - 1
    			Dim uc As UnicodeCategory = CharUnicodeInfo.GetUnicodeCategory(stFormD(ich))
    			If uc <> UnicodeCategory.NonSpacingMark Then
    				sb.Append(stFormD(ich))
    			End If
    		Next
     
    		Return (sb.ToString().Normalize(NormalizationForm.FormC))
    	End Function

  12. #12
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Bonsoir,

    Techniquement, ça aurait plus eu sa place en partie VB.Net (quitte à faire un lien vers ce sujet)
    Code VB.Net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function RemoveDiacritics(ByVal stIn As String) As String
        Dim stFormD = stIn.Normalize(NormalizationForm.FormD)
        Dim sb As New StringBuilder
     
        For Each ch As Char In stFormD
            If Char.GetUnicodeCategory(ch) <> UnicodeCategory.NonSpacingMark Then
                sb.Append(ch)
            End If
        Next
     
        Return sb.ToString.Normalize(NormalizationForm.FormC)
    End Function

    Cordialement !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprimer les accent dans une chaine
    Par avigeilpro dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 12/09/2006, 11h04
  2. [MySQL] Supprimer les informations des champs dans une table (suite)
    Par snakejl dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 26/05/2006, 15h37
  3. [ASE][12.5] Supprimer les accents
    Par Semhur dans le forum Sybase
    Réponses: 3
    Dernier message: 02/05/2006, 11h33
  4. Supprimer les espaces des noms de fichier
    Par Cathy dans le forum Linux
    Réponses: 20
    Dernier message: 04/08/2005, 17h13
  5. [String] Comment supprimer les accents
    Par iuz dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 08/03/2004, 02h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo