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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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 confirmé
    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
    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 : 43
    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
    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
    Membre éprouvé
    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 : 41
    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
    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
    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
    Membre éprouvé
    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 : 41
    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
    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 : 43
    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
    Par défaut
    Avec npgsql on peut spécifier l'encodage dans la chaine de connexion, ça peut peut-être aider...

  8. #8
    Membre éprouvé
    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 : 41
    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
    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 : 43
    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
    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...

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