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

Lazarus Pascal Discussion :

Problème d'encodage - UTF8 vers ANSI [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Par défaut Problème d'encodage - UTF8 vers ANSI
    Bonjour,

    La mise à jour vers la version 2.24 64 bits continue à poser des problèmes :

    Dans mon projet, je suis amené à créer une base de données avec des champs noms et prénoms. Les noms étant stockés en majuscule et la première lettre des prénoms en majuscule et les autres en minuscule (ce qui fait par une fonction spécifique qui fonctionne bien). Jusqu'à présent, la séquence de code suivante (expl pour le nom) fonctionnait sans problème Laz Util étant dans la options du projet et LazUTF8 dans Uses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TF_Gene.DB_NaissNomEnftExit(Sender: TObject);
     Var NomEnfant : String   ;
    begin
     NomEnfant := Upcase(Utf8ToWinCP(DB_NaissNomEnft.Text)) ;
     DB_NaissNomEnft.text := NomEnfant ;
     DB_NaissPnomEnft.SetFocus ;
    end;
     
    procedure TF_Gene.DB_NaissNomEnftKeyPress(Sender: TObject; var Key: char);
    begin
       if Key = #13 Then  DB_NaissPnomEnft.setFocus ;
    end;
    par exemple si j'entrais comme nom "estÉve" ( le É étant entré par la touche Alt144) je récupérais dans le champ "NomEnfant" de la base "ESTÉVE". Depuis le passage à la version 2.24 il est impossible de traduire en Ansi les entrées faites dans les contrôles qu'il s'agisse du type TDB_edit ou simplement Ed_Edit et que l'on utilise UTF8ToANSi, UTF8ToSys ou UTF8ToWinCp. Actuellemnt je récupère NomEnfant = $000000000E318CB8^: 'EST'#$C9'VE'
    Comment se sortir de ce mauvais pas ?

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 459
    Par défaut
    Bonjour,

    Pour moi, cela est bon (Un E avec accent encodé en ANSI western European vaut bien C9).
    Ce que tu vois, c'est dans le débogueur? Si oui c'est normal. Que dit ta base de données (avec un autre outil?)

    Personnellement dans mon appli depuis le passage du compilateur à UTF8 qui a fait que les fonctions UTF8toSys sont neutralisées (en leur faisant retourner sans conversion) j’utilise UTF8ToWinCP et WinCPToUTF8.

    Cordialement

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    261
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 261
    Par défaut
    Bonjour,

    Dans les TdbEdit c'est même EST?VE qui doit s'afficher. Tout ceci est normal puisque seul l'UTF8 est affiché correctement par Lazarus et que le code $c9 n'est pas un caractère normal en UTF8.
    Pour la liaison à la base, le "CharacterSet" de connexion à utiliser doit être UTF8. Si le champ correspondant dans la base est du WIN1252, le transcodage doit se faire automatiquement, à condition que le caractère existe dans les 2 jeux de caractères.
    UTF8UpperCase devrait suffire pour mettre le nom en majuscules.

    André

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Par défaut Affichage et encodage UTF8-Ansi
    Bonjour,

    J'utilise Zeos pour communiquer avec la base de données. Dans le ZC_Naiss la propriété Controlcodepage est bien Ccp-UTF8.
    A l'affichage dans le TBD_Edit j'ai bien EST?VE ainsi d'ailleurs que dans le champ correspondant de la base que j'ai vérifié en utilisant sqliteadmin .
    C'est extrêmemnt génant alors que cela fonctionnait bien avec la version 2.0 32 bits de Lazarus que j'utilisais il n'y a pas si longtemps.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 206
    Par défaut même problème
    Bonour,

    En complément de ma réponse : j'ai testé l'option UTF8Uppercase (...) . J'ai bien un afichage ESTÉVE mais par contre la récupération dans le champ de la base de données donne : ESTÉVE.
    donc le problème reste entier .

  6. #6
    Membre émérite
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 459
    Par défaut
    Ça
    ESTÉVE.
    c'est parce que c'est encodé en UTF8.
    Pour autant que j'ai vu cpp_UTF8 ne fait rien! C'est à dire (si j’ai bien lu car je ne suis pas spécialiste de ZEOS) que ce que as dans ta base, tu le reçois dans ton application.

    Pour info avant d'arriver à la version 2.24 tu venais de quelle version? Car depuis au moins la version 2 c'est comme ceci?

    Donc soit
    * (tu dois connaître ZEOS mieux que moi) tu trouves ce qui te permet un transcodage ANSI en base vers UTF8 sur ton programme
    * tu transforme ta base en UTF8
    * Tu utilises les fonctions UTF8toWincp (de ton programme vers la base) et WinCptoUTF8 (de ta base vers ton programme)

    Il te faut aussi savoir que le codage ANSI dépend de la zone où tu es et que le É se transforme en Iota en Grèce (par exemple)

  7. #7
    Membre chevronné

    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 181
    Par défaut
    Bonjour !

    Citation Envoyé par OR34a Voir le message
    En complément de ma réponse : j'ai testé l'option UTF8Uppercase (...) . J'ai bien un affichage ESTÉVE mais par contre la récupération dans le champ de la base de données donne : ESTÉVE.
    donc le problème reste entier .
    Acaumes a tout expliqué. Mais de toutes façons, où est le problème puisque vous savez comment l'afficher correctement dans votre application ?

    bb84000

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

Discussions similaires

  1. [NotePad++] Extension de conversion UTF8 vers ANSI
    Par xorax dans le forum Autres Logiciels
    Réponses: 0
    Dernier message: 19/12/2007, 18h02
  2. Problèmes d'encodage utf8
    Par gvdmoort dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 09/09/2007, 17h32
  3. [MySQL] Problème d'encodage utf8
    Par tomix81 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 25/07/2007, 23h31
  4. Problème d'encodage UTF8
    Par vg33 dans le forum Langage
    Réponses: 6
    Dernier message: 26/07/2006, 20h28

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