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 :

[0.9.27] CharSet ISO8859_1 [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut [0.9.27] CharSet ISO8859_1
    Bonjour
    Après une suspension temporaire de mon activité lazarus , je m'y remets doucement .

    Cela fait deux jours que je me bats avec la notion de charset sans arriver à me dépatouiller du truc .

    mon environnement tout d'abord : Windows Vista et Ubuntu, Lazarus 9.0.27, Firebird 2.1 (une base en charset ISO8859_1) et pour y accéder les composants soit Zeos, UIB ou même les natifs Lazarus .

    ET là le sujet de ma question rien à faire , mes caractères accentués , bien que correctement(*) enregistrés dans ma base , n'apparaissent pas à l'affichage (dbgrid,dbtext ou dblabel)

    (*) avec un programme delphi et les mêmes composants tout est ok

    je suis persuadé qu'il y a un truc , mais lequel ? un post (question de jean christophe et réponse de selzig) précédent parle de UTF8 mais j'ai beau essayer de le mettre en paramètre de connexion rien n'y fait .

    Une piste ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #2
    Membre habitué
    Inscrit en
    Mars 2002
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 61

    Informations forums :
    Inscription : Mars 2002
    Messages : 230
    Points : 127
    Points
    127
    Par défaut
    Pour mon probléme avec MySQL, j'ai trouvé ca:
    http://bugs.freepascal.org/view.php?id=13588
    Peut etre que c'est pareil pour toi (je veux dire le meme probleme avec cette variable)?

    Je pense que c'est la raison pour laquelle ca ne marche pas chez moi.
    Je vais essayer avec Zeo, mais je n'arrive meme pas á débugger une application sans composants pour le moment....

    a+
    Jean Christophe
    Sincérement
    Jean-Christophe

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut Damned , serait-ce un problème de version ?
    Je viens de tester sur une version 9.0.26 Ubuntu et là , j'ai tout mes accents .

    J'en reste coi

    [Edit] et non , fausse joie la base testée était en charset NONE

    le problème reste entier

    [ReEdit] je viens d'installer la 0.9.27 via SVN ( au passage le tuto d'installation ) , malgré cela même constat .
    Au passage , j'ai fait une autre base d'essai en charset UTF8 et là j'ai bien les accents

    Il me manque très certainement quelque chose mais quoi ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Membre habitué
    Inscrit en
    Mars 2002
    Messages
    230
    Détails du profil
    Informations personnelles :
    Âge : 61

    Informations forums :
    Inscription : Mars 2002
    Messages : 230
    Points : 127
    Points
    127
    Par défaut
    Bonjour,

    As tu lu celui lá?

    http://www.developpez.net/forums/d75...e-mysql-latin/

    Sincérement
    Jean-Christophe
    Sincérement
    Jean-Christophe

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par jean christophe Voir le message
    Bonjour,

    As tu lu celui lá?
    Bonjour,

    Oui bien sur .

    En fait je n'ai pas encore réglé le problème mais j'ai au moins un début de piste car si j'utilise l'instruction UTF8Encode alors l'affichage de la valeur est correct . Me reste plus qu'a trouver la solution à "dire a Firebird de m'envoyer les données en UTF8"
    j'ai essayé en changeant le charset de connexion et en suis resté là pour l'instant .
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je ne pratique pas les connecteurs natifs mais j'ai passé pas mal de temps sur les problèmes d'encodage travaillant sur Windows et Linux pour pratiquement tous mes programmes.

    Si vos tables mySQL (ou autres) sont en utf8 et que vous travaillez sous linux : aucun problème car Linux travaille nativement en utf8 comme MacOs. Donc ils sont "compatibles" sans aucun traitement.

    Si vous êtes sous Windows alors là cela se complique. Tous les Windows sont nativement en ANSI et non en UTF8, et depuis Lazarus 0.9.26, une partie des variables et des objets "serait naturellement" en UTF8. Sur le papier cela semble simple, mais dans la réalité c'est différent... Il y a donc souvent incompréhension notamment au niveau des Dataset. Le mieux est de tester...

    Le problème inverse existe (Windows et base en UTF8) : là, au mieux, apparaissent des caractères curieux...

    Cela n'est pas dû qu'aux DataSet. J'ai rencontré le même problème avec les fichiers cvs ou même txt. Il a fallu que je bricole une routine pour reconnaître les fichiers txt encodés en UTF8 ou en ANSI et ainsi pouvoir adapter la stratégie en fonction de l'OS. (http://www.developpez.net/forums/d71...d-ansi-format/)

    Enfin dernière remarque à laquelle on ne pense pas. L'avenir, c'est l'utf8 sans doute mais en ce qui concerne l'encodage des tables des BDD... en UFT8, le tri de champs remplis au clavier avec notre alphabet et ses lettres accentuées est moins performant que latin1 (c'est un euphémisme : c'est souvent faux. Pour nous "lec" et "léd" se suivent car "é" et "e" sont équivalents : pas en utf8).... Voilà pourquoi, en plus du fait que Windows est l'OS dominant, on utilise latin1_swedish_ci (qui lui-même est plus performant à ce niveau que latin_general_ci). Les anglosaxons n'ont pas ce prob et privilégient massivement utf8 pour leurs BDD.

    En résumé, il n'y a pas de solutions multiplateformes : il faut jouer avec les UTF8ToAnsi et AnsiToUTF8. D'autant que à partir de Lazarus 0.9.26, l'encodage propre à ses string a changé... les programmes développés en Lazarus 0.9.24 ne sont pas toujours directement portables.


    Cordialement. Gilles
    Dernière modification par Invité ; 29/05/2009 à 11h35.

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Je continue a nager dans les eaux troubles de l'encodage
    cela n'arrive pas a rentrer dans ma petite tête

    néanmoins , j'ai au moins trouvé une "astuce", dans l'événement onGetText du champ préalablement déclaré j'encode la valeur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TForm1.Query1LIBELLEGetText(Sender: TField; var aText: string;
      DisplayText: Boolean);
    begin
      aText:=UTF8Encode(Sender.AsString);
    end;
    Bien que solution de s'il faut faire ça pour chaque champ on est pas sorti de l'auberge !

    Je trouverais un jour , je trouverais !

    cependant si entretemps quelqu'un pouvait m'aiguiller sur un tutoriel ou article CLAIR sur ce sujet UTF8 ISOnnnnnn_nn etc ... , je lui en serais fort reconnaissant (plus j'en google-lis plus je m'enfonce)


    [Edit : 'Seulement quelques heures plus tard']
    Force est de dire que c'était bête à manger du foin .
    L'astuce avec Zeos était d'indiquer codepage=UTF8 dans les propriétés de la connexion (testé uniquement sous Windows pour l'instant) alors que je persistais a mettre ISO .
    Avec les UIB , force m'est de constater que lors de mes posts précédents j'avais laissé characterset as csNONE ! pour la connexion c'est Characterset csISO8859_13 (dans mon cas) donc le character set d'encodage de la base
    Quant au natif : pour l'instant j'ai laissé tomber , j'espére qu'il s'en relèvera

    n'empêche faut qu'on m'explique


    Reste quand même la mauvaise nouvelle aux pauvres mortels qui ont créé leurs bases en charset NONE (ce qui est fortement déconseillé cf forum Firebird) car comme moi ils n'y entendaient que couik a ces histoires louches : Cela ne peut pas fonctionner avec charset NONE l'astuce du haut vous feras l'affichage c'est déjà ça

    PS . Je l'ai eu

    Je mets donc a mon grand soulagement
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut
    Pas trop vite : ce n'est pas gagné

    Il est vrai qu'avec le onGetText, le remplissage d'un DBGrid se fait correctement.

    En revanche ce code

    Mabase.Open;
    if Mabase.locate('NOM_DE_CHAMP',Zone,[]) then
    ShowMessage('Trouvé');
    ne donne aucun résultat si NOM_DE_CHAMP contient des accents.

    De même

    select * from MABASE where NOM_DE_CHAMP = :XZONE
    ne renverra rien si l'enregistrement recherché contient des accents

    Pour trouver, il faut faire :

    MaBASE.Open;
    With MaBASE do
    While not MaBASE.Eof do
    begin;
    if AnsiToUtf8(NOM_DE_CHAMP) = xZone then
    (reste du code);
    et dans ce cas, une zone avec accents est correctement détectée. Au passage, le OnGetText est inutile.

    Ceci dit à moins que je n'ai pas tout compris (hypothèse toujours envisageable)
    Ce qui se conçoit bien s'énonce clairement
    Et les mots pour le dire viennent aisément (Boileau)

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

Discussions similaires

  1. mysql 3.23 probleme charset
    Par lcoder dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 04/07/2005, 14h28
  2. Lire un fichier avec un charset UTF8
    Par Sonic dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 03/05/2005, 20h37
  3. [Encodage] Charset et console Dos
    Par ToYonos dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 01/02/2005, 13h10
  4. Problème de charset
    Par Yodalf dans le forum Langage
    Réponses: 3
    Dernier message: 21/10/2004, 10h29
  5. Problème avec accents et CHARACTER SET ISO8859_1
    Par kinda dans le forum InterBase
    Réponses: 13
    Dernier message: 30/10/2003, 16h49

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