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 :

Migration Delphi-Lazarus : problème d'encodage de caractères [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 29
    Par défaut Migration Delphi-Lazarus : problème d'encodage de caractères
    Bonjour,

    Toujours débutant et maintenant en retraite, j'essaie de convertir mes vieilles applis perso - faites en Delphi 3 et 7 - en Lazarus 1.8 installé ces jours-ci.

    J’ai un fichier contenant des notes que j’ouvre dans une StrinGrid.
    Quand je l’ouvre avec l’exe Delphi, dans toutes les cellules de la StringGrid, les lettres accentuées sont correctement lues.
    Quand je l’ouvre avec l’appli Lazarus, dans les cellules, à la place des é, è, à, ë, ù, il y a des ? que je remplace avec une fonction qui change tous les ? en é et je sauvegarde.
    (Je sais que c’est idiot de remplacer tous les é, à, ù etc… par é, mais il fallait bien essayer qq chose );;;

    par ex : num?ros corrigé donne bien numéros dans l’exe Lazarus, et est bien relu numéro à la réouverture.
    Mais alors, dans l’exe Delphi c’est lu numĀ©ros …
    Sachant que j’ai au minimum 3000 cellules à corriger à la main (sur 15.000)
    Au secours… Faut-il tout réécrire et abandonner Delphi ???

    J'ai lu la FAQ et quelques forums, mais n'ai rien compris, parce que si vous, vous savez de quoi vous parlez, moi pas...

    Pour expérimenter j'ai placé sur la StringGrid un bouton et un Edit dans lequel j'ai copié le contenu d'une cellule :

    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
    procedure TRepert.Bouton1Click(Sender: TObject);
    var s:string;
    begin
       Edit1.Text := Grille.Cells[7,2];                           // Ensuite j'ai utilisé une boucle pour toutes les cellules [I, J]
       s := Edit1.Text;
       Edit1.Text := Widestring(StrReplace ('?', 'é',s));  // Widestring ou pas c'est pareil = change bien Tous les ? en é
       Grille.Cells[7,2]:= Edit1.Text;
       Edit1.Text:='';
    end; 
     
    function StrReplace(Substr,replace,s:string):string;
    {============================================================================}
    {remplace toutes les sous-chaines Substr par replace                         }
    { ex : StrReplace ('toto', 'tata', 'le toto est ..') renvoie 'le tata est ..'}
    {============================================================================}
    var ChaineSource,ChaineCible:string;
        i,TailleChaineRemplacement:integer;
    begin
      ChaineSource:=s;
      ChaineCible:='';
      TailleChaineRemplacement:=length(Substr);
      while pos(Substr,ChaineSource)>0 do  //tant que l'on trouve une sous-chaine
      begin
        i:=pos(Substr,ChaineSource)-1;      // position de la sous-chaine à remplacer
        ChaineCible:=ChaineCible+copy(ChaineSource,1,i)+replace;
        delete(ChaineSource,1,i+TailleChaineRemplacement);    //on retire de chaineTemp
      end;
      Result:=ChaineCible+ChaineSource;
    end;
    Et si ça fait pareil pour toutes mes BD, etc... je suis mal parti...

    A vous lire avec attention.

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    452
    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 : 452
    Par défaut
    Bonjour,

    1/ Je penses que tu aurais du ouvrir une autre discussion pour cette question. [tourlourou EDIT = traité, merci]

    2/ Penses aux balises Code [tourlourou EDIT = traité, merci]

    3/ Les fonctions à utiliser dans LAZARUS sont UTF8ToWinCP et WinCPToUTF8 pour passer de l'encodage ANSI Windows utilisé par Delphi (avant 7 je crois) vers l'encodage UTF8 utilisé par LAZARUS.

    Cordialement

  3. #3
    Membre émérite

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 035
    Par défaut
    J’ai un fichier contenant des notes que j’ouvre dans une StrinGrid.
    Tu peux aussi faire une copie de tes fichiers et les convertir en UTF8 pour les utiliser avec Lazarus.

  4. #4
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Bonjour

    Les fichiers textes que tu ouvres dans le stringgrind sont certainement en ansi. Essaye simplement d'ouvrir ton fichier dans NotePad++ https://notepad-plus-plus.org/fr/ et convertis le en UTF8 sans bom cela devrait résoudre le problème des caractères accentués sans passer par une fonction.

    Nom : 2018-10-31_140551.jpg
Affichages : 1010
Taille : 26,6 Ko

    Si tu as beaucoup de fichier tu peux essayer cet outils https://www.rotatingscrew.com/utfcast-express.aspx

    ou sous windows dans powershell tu peux tenter ce script : % foreach($i in ls -name DIR/*.txt) { get-content DIR/$i | out-file -encoding utf8 -filepath DIR2/$i } en changeant DIR et DIR2 par tes dossiers "source" et "cible"

    Bonne fin de dimanche
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 29
    Par défaut
    Bonjour,
    Merci pour vos réponses.

    Acaumes : tu as raison, j’aurais dû ouvrir une autre discussion… Je m’en suis rendu compte après…

    mm_71 et BeanzMaster : J’ai essayé la conversion en UTF-8 avec Notepad++ qui donne effectivement un résultat quant au texte, mais ensuite, l’ouverture dans la StringGrid est plutôt cocasse… Tous les string sont décalés harmonieusement dans les cellules…

    Je n’ai pas encore essayé avec des textes ouverts dans des memo. Chaque chose en son temps.

    powershell qui ne m’est pas du tout familier. Autre sujet de découverte… pour le fichier C:\TOOLS\PTT\Memo.txt

    Code PowerShell : Sélectionner tout - Visualiser dans une fenêtre à part
    % foreach($i in ls -name C:\TOOLS\PTT/Memo.txt) { get-content C:\TOOLS\PTT/$i | out-file -encoding utf8 -filepath C:\TOOLS\PTT\AA/$i }

    Message erreurs :

    Au caractère Ligne:1 : 14
    + % foreach($i in ls -name C:\TOOLS\PTT/Memo.txt) { get-content C:\TOOL ...
    +              ~~
    Jeton inattendu « in » dans l’expression ou l’instruction.
    Au caractère Ligne:1 : 13
    + % foreach($i in ls -name C:\TOOLS\PTT/Memo.txt) { get-content C:\TOOL ...
    +             ~
    Parenthèse fermante « ) » manquante dans l’expression.
    Au caractère Ligne:1 : 47
    + % foreach($i in ls -name C:\TOOLS\PTT/Memo.txt) { get-content C:\TOOL ...
    +                                               ~
    Jeton inattendu « ) » dans l’expression ou l’instruction.
        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : UnexpectedToken
    J'ai des progrès à faire.

    A vous lire

    Cordialement

  6. #6
    Membre émérite

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 035
    Par défaut
    Tous les string sont décalés harmonieusement dans les cellules…
    Une copie d'écran serait la bienvenue.

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

Discussions similaires

  1. problème d'encodage de caractères spéciaux
    Par anti-conformiste dans le forum Langage
    Réponses: 3
    Dernier message: 14/12/2006, 09h42
  2. [mssql8sp3] problème d'encodage de caractères
    Par arnolem dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 24/10/2006, 17h31
  3. Réponses: 3
    Dernier message: 24/10/2006, 11h05
  4. Problème d'encodage de caractères
    Par Felmorian dans le forum ASP
    Réponses: 1
    Dernier message: 04/07/2006, 17h36

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