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 :

Encodage C# et Postgresql


Sujet :

Windows Forms

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Encodage C# et Postgresql
    Bonjour,

    je suis en train de créer un programme (WINFORM) en c# avec une BDD Postgresql.

    Les requêtes contenant des accents me générent cette erreur :

    "ERREUR: 22021: Séquence d'octets invalide pour le codage \"UNICODE\" : 0xe9e0e8"


    La base de données est en unicode, mais je n'arrive pas à savoir quel est l'encodage utilisé par C#. Pourriez vous me renseigner à ce sujet?

    Cela me permettrait de convertir la requete avant de l'exécuter. Et lorsque je ferai un select je ferai la conversion inverse pour l'affichage.

    Est la bonne solution? ou avez une autre solution plus efficace à me proposer?



    Merci


    LilSaint

  2. #2
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    MSDN :
    Le type string représente une chaîne de zéro ou plusieurs caractères Unicode.
    Ceci dit je t'apporte une info, mais j'ignore la solution ...

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Il y a plusieurs character sets Unicode... La String de .NET utilise UTF-16. Si ce n'est pas celui qui est utilisé par PostgreSQL, il faut convertir en utilisant la classe dérivée de Encoding la plus adaptée

  4. #4
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    On peut voir une extrait de ton code?

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    merci pour vos réponses.
    Durant le WE, j'ai fait le test avec un encodage ISO_8859_8 dans postgresql et cela fonctionne sans avoir besoin de faire de conversion.
    Je choisi donc la solution de facilité en restaurant mon ancienne base dans la nouvelle.

    Pour ceux qui veulent rester en UNICODE, j'ai essayé tous les encodages (de départ et de destination) en faisant :
    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
     
    // ma string
    string asciiString = "INSERT INTO toto VALUES ('tototéàè')";
     
                // Create two different encodings.
                Encoding ascii = Encoding.ASCII;
                Encoding unicode = Encoding.UNICODE;
    ;
     
                // Convert the string into a byte[].
                byte[] asciiBytes = ascii.GetBytes(asciiString);
     
                // Perform the conversion from one encoding to the other.
                byte[] unicodeBytes = Encoding.Convert(ascii, unicode, asciiBytes);
     
                // Convert the new byte[] into a char[] and then into a string.
                // This is a slightly different approach to converting to illustrate
                // the use of GetCharCount/GetChars.
                char[] unicodeChars = new char[unicode.GetCharCount(unicodeBytes, 0, unicodeBytes.Length)];
                unicode.GetChars(unicodeBytes, 0, unicodeBytes.Length, unicodeChars, 0);
                string unicodeString = new string(unicodeChars);
     
                // Display the strings created before and after the conversion.
                MessageBox.Show(Encoding.GetEncoding(0).ToString());
                MessageBox.Show("Original string: " + asciiString);
    // enfin je regarde si la requête passe
                MessageBox.Show("unicode converted string: " + unicodeString);
                MessageBox.Show(Param.ExecuteQuery(unicodeString).ToString());
    Mais aucun n'a fonctionné donc si quelqu'un a la soluce, qu'il nous la donne!

    Merci

  6. #6
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Vous utilisez npgsql?
    Avez-vous essayé avec des requêtes paramétrées?

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Avec npgsql on peut spécifier l'encodage dans la chaine de connexion, ça peut peut-être aider...

  8. #8
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    J'allais y venir, j'espérai justement voir quelle était la méthode employée pour l'interaction avec la base de donnée en demandant un extrait de code.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    En fait je trouve étrange qu'il n'y ait pas une propriété Encoding dans la classe DbConnection... de cette façon ce serait totalement transparent, l'encodage souhaité serait utilisé pour transmettre les chaines à la base, et on n'aurait plus à s'en préoccuper...

  10. #10
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    C'est pas au programmeur de faire ce boulot chaque fois qu'il fait une requête, il doit y avoir quelque chose qui cloche.

  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
    bonjour à tous!
    c'est un problème récurent avec npgsql. On a le même problème dès que la base de données utilise l'encodage utf8.

    Je galère dessus depuis un bon mois.

  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
    ... PGCLIENTENCODING dans la chaîne de connexion.

    Tu as testé ou pas ? Tu n'as pas répondu sur le post que tu avais envoyé.

  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
    Salut Kaidan,
    oui je l'ai testé mais ça ne marche pas! De plus dans la documentation de npgsql, on me dit que l'élément est obsolète.
    donc je galère toujours...

  14. #14
    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
    Ok.

Discussions similaires

  1. [PostgreSQL] Encodage UTF8 (?) bizarre (postgresql+PHP)
    Par CetTer dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 04/06/2014, 22h06
  2. [PostgreSQL] Encodage [PostgreSQL 9.2]
    Par Benjiman dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 14/05/2013, 16h36
  3. [PostgreSQL 8.3] Problème d'encodage de base
    Par levalp dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 03/09/2010, 14h53
  4. problème d'encodage postgresql
    Par Qamalito dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 13/08/2007, 09h36
  5. probleme encodage base postgresql
    Par touane dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 15/06/2007, 10h36

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