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.28/Linux] Memo n'affiche pas les lignes accentuées


Sujet :

Lazarus Pascal

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 136
    Points
    136
    Par défaut [0.9.28/Linux] Memo n'affiche pas les lignes accentuées
    Bonjour

    je suis avec Linux
    Lazarus 0.9.28 beta et FCP 2.2.4

    Dans un memo, je n'arrive pas à afficher les lignes d'un fichier qui contiennent des accents. (alors que je peux les afficher si ça vient d'un Edit. )

    voici mon programme de test .

    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    unit Unit1; 
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
      StdCtrls;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        Button4: TButton;
        Edit1: TEdit;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
        procedure Button4Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { private declarations }
      public
        { public declarations }
      end; 
     
    var
      Form1: TForm1; 
     
    implementation
     
    { TForm1 }
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
         memo1.clear;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
         memo1.append(edit1.text);
    end;
     
    procedure TForm1.Button3Click(Sender: TObject);
      var f:textfile;
          ligne:string;
    begin
         assignfile(f,'test.txt');
         reset(f);
         while not eof(f) do
         begin
              readln(f,ligne);
              memo1.Append(ligne);
         end;
         closefile(f);
    end;
     
    procedure TForm1.Button4Click(Sender: TObject);
    begin
         memo1.append('Apparamment quand je lis un fichier les lignes avec des caracères accentués ne s''affichent pas . Embêtant...');
    end;
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     
    end;
     
    initialization
      {$I unit1.lrs}
     
    end.
    et voici le fichier que je veux lire ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    1) ceci est la ligne du haut
    2) deuxième ligne
    3) ligne de fin.
    et la 2ème ligne ne s'affiche pas !

    si quelqu'un à une idée ...

    bonne journée.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    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 036
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    bonjour,
    ça sent le UTF8 a plein nez .

    j'ai juste le temps de t'indiquer une piste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
         reset(f);
         while not eof(f) do
         begin
              readln(f,ligne);
              memo1.Append(UTF8Encode(ligne)); 
    //ou (je n'ai pas encore trouver un moyen mnemotechnique pour me 
    //souvenir de celle a employer :marteau: )
            memo1.Append(UTF8Decode(ligne)); 
    
         end;
         closefile(f);
    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

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Points : 136
    Points
    136
    Par défaut
    Bonjour et Merci SegioMaster

    ta piste était la bonne

    en mettant ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    memo1.Append(UTF8Encode(ligne));
    ça fonctionne comme une horloge sur Linux

    j'ai compilé également sur Windows XP et le résultat est bon ! (ouf !)

    encore merci mais c'est vrai que ces UTF8 c'est un peu compliqué ...

    Bonne continuation

  4. #4
    Membre expérimenté
    Avatar de chris37
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    Juillet 2007
    Messages
    378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Directeur des systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 378
    Points : 1 688
    Points
    1 688
    Par défaut
    Ouais, j'ai arrêté de chercher et j'encode systématiquement

    Surtout avec les RessourceString
    @+

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations forums :
    Inscription : Septembre 2009
    Messages : 68
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    On dirait que les composants ne savent afficher que de l'UTF-8, donc des chaines double-byte, ce qui n'est pas idiot dans le principe, puisque ce jeu tend à se généraliser.

    Le problème c'est que les constantes de FPC et/ou certains types de données ne semblent stocker que des chaines en simple-byte, et non les double-bytes indispensables pour supporter l'UTF-8.

    Cela concerne apparemment tout ce qui utilise le type TStringList.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaStringGrid.Cells[2, 0] := 'état';
    n'affiche pas ce qu'il faut.

    Certes, on peut systématiquement encoder, mais c'est fastidieux et un peu absurde si le format universel tend à être l'UTF-8. Je peux comprendre qu'on doive encoder pour récupérer d'anciennes données, mais pas dans ce cas là.

    Je n'arrive pas à comprendre la "philosophie" des développeurs. S'agit-il d'un développement non abouti, ou est-ce considéré comme satisfaisant ainsi ?

    Si vous avez trouvé des infos là dessus, je suis intéressé !

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations forums :
    Inscription : Septembre 2009
    Messages : 68
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    Pour ce qui concerne les constantes chaînes, je pense que la bonne solution consiste à convertir en UTF-8 les fichiers sources .pas venant de Delphi, qui ne seraient pas déjà dans ce jeu de caractères.

    A priori, Lazarus créé ses nouveaux fichiers source en UTF-8, et peut-être que les dernières versions de Delphi le font aussi. Il ne faut donc pas convertir tout, car on risque de convertir deux fois.

    Sous Linux, on peut utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iconv -f ISO8859-1 -t UTF-8 unit1.pas > unit1_utf8.pas
    Un jour, je tâcherai de faire un shell qui renomme aussi, et de l'intégrer en outil externe. Mais si vous ne savez pas quoi faire, n'hésitez pas....

    Voilà une tâche de plus à ajouter à celles nécessaires à une conversion Delphi vers Lazarus.

    Si vous lisez des fichiers textes en entrée qui ne sont pas en UTF-8, et qu'ils ne doivent pas rester en ISO pour d'autres applications, je crois qu'il est intéressant de les convertir aussi pour éviter un encodage systématique.

    Bien sûr, ceci ne résoud pas les problèmes dus aux bases de données (et fichiers) qui ne sont pas en UTF-8 et qu'on ne peut pas convertir parce que d'autres applications les utilisent.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 48
    Points : 55
    Points
    55
    Par défaut
    See attachment
    Images attachées Images attachées  

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2009
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 66

    Informations forums :
    Inscription : Septembre 2009
    Messages : 68
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    Merci pour cet apport détaillé

    Mais dans quelle version de Lazarus, et où, trouves-tu ce menu ?

    Dans la 0.28.2 je ne vois que "outils', "Convertir le codage", mais ce n'est apparemment utilisable que si on veut convertir TOUS les sources, ce qui n'est pas le cas général.

    A+

    Martinus

  9. #9
    Membre régulier

    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 32
    Points : 95
    Points
    95
    Par défaut
    Le menu mentionné par Theodp est accessible par un clic droit dans l'éditeur de source.
    Il y a énormément de chose dans Lazarus, encore faut-il le savoir et les trouver.

    Bonne journée.

  10. #10
    Membre éprouvé
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Points : 1 294
    Points
    1 294
    Par défaut
    Citation Envoyé par jojpa54 Voir le message
    je suis avec Linux
    Lazarus 0.9.28 beta et FCP 2.2.4
    version beta, donc déjà une MAJ s'impose vers la 0.9.28.2 : http://sourceforge.net/projects/lazarus/files/
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | Règlement | Contactez l'équipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

Discussions similaires

  1. Réponses: 0
    Dernier message: 28/11/2012, 09h59
  2. [AC-2010] liste deroulante qui n'affiche pas les lignes vides
    Par RodKAZ dans le forum IHM
    Réponses: 8
    Dernier message: 22/11/2012, 10h15
  3. [Tcl/Tk] Mon interface n'affiche pas les images
    Par randazar dans le forum Tcl/Tk
    Réponses: 1
    Dernier message: 21/11/2006, 16h48
  4. Word n'affiche pas les images de mon état
    Par maxdwarf dans le forum Access
    Réponses: 2
    Dernier message: 07/06/2006, 13h36
  5. [CR9 et VB6] n'affiche pas les nouvelles donnée
    Par moumoule17 dans le forum SDK
    Réponses: 3
    Dernier message: 22/04/2005, 12h03

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