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

Windows Forms Discussion :

encoder en UTF8 le contenu d'un texbox


Sujet :

Windows Forms

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 285
    Points : 421
    Points
    421
    Par défaut encoder en UTF8 le contenu d'un texbox
    Bonjour à tous,
    je code une application qui attaque une base postgresql et là ma base en encodée en utf8.
    De ce fait, lorque le contenu de ma texbox est accentué, j'ai une erreur qui me dit que le text n'est pas en UTF8.

    Alors je souhaiterais savoir comment convertir le contenue de ma textbox en utf8 avant de l'envoyer dans ma base?

    Merci d'avance pour votre aide.

  2. #2
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    1- tu ouvres google
    2- tu tapes "encode+utf8+c#"
    tu vas voir, c'est magique.

    fais un minimum de recherche la prochaine fois s'il te plait
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 285
    Points : 421
    Points
    421
    Par défaut
    bonjour,
    ça je l'ai fait! mais en fait tout ce que je trouve c'est le cas ou on va lire dans un fichier text et tester si c'est de l'utf8.

    Moi je veux encoder avant d'envoyer dans ma base!
    Alors je souhaite savoir s'il y a une fonction en csharp qui me permet de le faire!

    Merci à tous!

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 285
    Points : 421
    Points
    421
    Par défaut
    Salut à tous,
    voila un code que j'ai écris .
    Il s'avère que rien ne ce passe lorsque j'appelle cette fonction
    du genre
    maChaine=UTF8Encode("berthé Aïcha...")
    car lors de l'insertion dans la base j'ai une erreur "format utf8 invalide"
    Quelqu'un peut -il me dire où est l'erreur!

    Merci d'avance.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
            public string UTF8Encode(string EncChaine)
            {  //Chaine encodé avec l'encodage par défaut de C# : l'Unicode.
                string chaineEncodeeUTF8;  
                char[] myChars = EncChaine.ToCharArray();
                //On va encoder maintenant en unicode
                Encoder myEncoder = Encoding.UTF8.GetEncoder();
                int numDeBytes = myEncoder.GetByteCount(myChars,0,myChars.Length,true);//Donne le numéro de chaque byte
                byte[] myByte = new byte[numDeBytes];
                myEncoder.GetBytes(myChars, 0, myChars.Length, myByte, 0, true);
                chaineEncodeeUTF8 = Encoding.UTF8.GetString(myByte);
                return chaineEncodeeUTF8;
            }

  5. #5
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    A mon avis, le problème ne vient pas de là...

    Code : 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
     
     
                string maString = "La requête SQL.";
                byte[] bytes = System.Text.Encoding.UTF8.GetBytes(maString);
                string maStringUTF8 = System.Text.Encoding.UTF8.GetString(bytes);
     
                Console.WriteLine("Base : " + maString);
                for (int i = 0 ; i < maString.Length ; i++) {
                    Console.Write(Convert.ToInt32(maString[i]).ToString() + " ");
                } // for
                Console.WriteLine();
                Console.WriteLine("UTF8 : " + maStringUTF8);
                for (int i = 0 ; i < maString.Length ; i++) {
                    Console.Write(Convert.ToInt32(maStringUTF8[i]).ToString() + " ");
                } // for
                Console.WriteLine();
                Console.WriteLine("Base = UTF8 ? " + (maString == maStringUTF8));
    L'encodage n'a d'importance uniquement lorsque la chaîne est traduite en tableau de bytes.

    Hors, tu n'envoies pas à ton serveur un tableau de bytes mais bien une string contenant la requête et à l'intérieur une string contenant la valeur texte que tu souhaites intégrer dans ta base.

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 285
    Points : 421
    Points
    421
    Par défaut
    maString et maStringUTF8 renvoie la même valeur malgré ce que tu as dit.
    Voila le resultat:

    Base : INSERT INTO utilisateur VALUES('test','test','berthé','test','demo')
    73 78 83 69 82 84 32 73 78 84 79 32 117 116 105 108 105 115 97 116 101 117 114 32 86 65 76 85 69 83 40 39 116 101 115 116 39 44 39 116 101 115 116 39 44 39 98 101 114 116 104 233 39 44 39 116 101 115 116 39 44 39 100 101 109 111 39 41
    UTF8 : INSERT INTO utilisateur VALUES('test','test','berthé','test','demo')
    73 78 83 69 82 84 32 73 78 84 79 32 117 116 105 108 105 115 97 116 101 117 114 32 86 65 76 85 69 83 40 39 116 101 115 116 39 44 39 116 101 115 116 39 44 39 98 101 114 116 104 233 39 44 39 116 101 115 116 39 44 39 100 101 109 111 39 41
    Base = UTF8 ? True

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Exact. C'est tout à fait normal. C'était exactement le but de mon post.

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 285
    Points : 421
    Points
    421
    Par défaut
    Bonjour,
    je suis donc au point de depart!
    Quelqu'un a une idée pour m'aider à resoudre mon problème?
    ==> Envoyer mes données au format utf8 à ma base postgresql?

  9. #9
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Tu utilises quels objets pour te connecter à PostgreSQL ?

    Tu n'es pas revenu au point de départ : ton postulat est que les chaînes de caractères que tu envoies à ton serveur ne sont pas codées en UTF8 et donc qu'il te retourne cette erreur.

    Or, on t'a montré que .NET traite toujours une chaîne comme des caractères Unicode (la création d'une chaîne à partir d'un tableau de byte UTF8 retourne la même chaîne qu'une chaîne créée directement en Unicode).

    Pour que cela fasse une différence, il faudrait que tu envoie à ton serveur SQL un tableau de byte et non une chaîne de caractères. Hors, tu envoies une requête SQL qui est une chaîne de caractères puisque les objets ICommand prennent en CommandText une string et non un byte[]. Si il y doit y avoir conversion, c'est au provider ou au serveur de le faire quand il reçoit la chaîne mais pas à toi, car il y a effectivement plus de chance que le provider communique avec le serveur via des byte[] que toi...

  10. #10
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Est-ce qu'on pourrait voir (même avec user/mot de passe masqué) la chaîne de connexion à PostgresSQL ?

  11. #11
    Membre averti
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 285
    Points : 421
    Points
    421
    Par défaut
    J'utilise Npgsql comme provider.

    ma caine est la suivante:
    Code : 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
            private NpgsqlConnection maConnexion = new NpgsqlConnection();
            public static NpgsqlConnection myCurcon = new NpgsqlConnection();
            //Ouverture
            public void ouvreBase()
            {
                string maChaine = string.Empty;
                maChaine = "Server=localhost;Port=5432;User Id=*****;Password=*****;Database=myDb;";
                maConnexion.ConnectionString = maChaine;
                try{ 
                    maConnexion.Open();
                    myCurcon = maConnexion;
                }
                catch (Exception monEx)
                {
                    MessageBox.Show("Erreur de connexion:\n" + monEx.Message, "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    Application.Exit();
                }
            }
    /*************************/
    public void AjoutUtilisateur(string myIdentifiant, string myMdp, string myNom, string myContact, string myNomgroupe)
            {
                string myPgChaine = "";
                //myNom = AjouteCote(myNom);
                //myNom = UTF8Encode(myNom);
                //myPgChaine = "INSERT INTO utilisateur(identifiant,mdp,nom,contact,nomgroupe,idutilisateur)";
     
                myPgChaine = "INSERT INTO utilisateur";
                myPgChaine = myPgChaine + " VALUES('" + AjouteCote(myIdentifiant);
                myPgChaine = myPgChaine + "','" + AjouteCote(myMdp) + "','" + myNom;
                myPgChaine = myPgChaine + "','" + AjouteCote(myContact) + "','" + AjouteCote(myNomgroupe) + "')";
                int LigneAjoute;
                NpgsqlCommand AddCmd = new NpgsqlCommand(myPgChaine, myCurcon);
                try
                {
                    LigneAjoute = AddCmd.ExecuteNonQuery();
                    MessageBox.Show(LigneAjoute + " ligne(s) ajoutée(s)");
                }
                catch (Exception myEx)
                {
                    MessageBox.Show(myEx.Message, "Ajout utilisateur", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
    /***********************************/
    public string AjouteCote(string chainePassee)
            {
                chainePassee = chainePassee.Replace("'", "''");
                return chainePassee;
            }
    Voilà en substance mon code pour Ajouter des données dans la base!

  12. #12
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    Alors, en cherchant 2s sur Google, j'ai vu qu'il y avait un paramètre (à passer dans la chaîne de connexion) pour spécifier l'encodage utilisé par un client PostgreSQL :

    Il faudrait peut-être regarder de ce côté là.

  13. #13
    Membre averti
    Homme Profil pro
    Ingénieur Développement Logiciel
    Inscrit en
    Septembre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Ingénieur Développement Logiciel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 285
    Points : 421
    Points
    421
    Par défaut
    Ok je jette un coup d'un de ce coté et je fais un retour sur ce que ça donne!

Discussions similaires

  1. Effacer le contenu d'un texbox après le click
    Par benny-blanco dans le forum ASP.NET
    Réponses: 2
    Dernier message: 31/05/2012, 18h25
  2. [IIS 7.5] Log : comment les encoder en UTF8, à la place de ANSI ?
    Par nicopulse dans le forum IIS
    Réponses: 6
    Dernier message: 15/03/2011, 19h31
  3. Boucle de renvoie avec DTpicker contenu cellule vers texbox
    Par tazko dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/02/2011, 22h30
  4. Créer un fichier texte encodé en UTF8
    Par jmnicolas dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 26/08/2008, 11h23
  5. Lire des caractères encodés en UTF8
    Par ratapapa dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/04/2008, 17h38

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