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

Langage Delphi Discussion :

Problème affichage chaine russe D6 -> DXE3


Sujet :

Langage Delphi

  1. #1
    Membre habitué

    Inscrit en
    Février 2005
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 356
    Points : 175
    Points
    175
    Par défaut Problème affichage chaine russe D6 -> DXE3
    Bonjour,

    Je récupère une chaine en BDD qui est : Îøèáêà âî âðåìÿ ïðîöåäóðû

    Avec Delphi 6, lorsque j'affecte cette chaine à un TEdit et que je change son charset en RUSSIAN_CHARSET

    La phrase s'affiche correctement.

    Avec Delphi XE3, avec les même modifications j'observe toujours Îøèáêà âî âðåìÿ ïðîöåäóðû

    Comment je peux faire ?

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 612
    Points : 25 303
    Points
    25 303
    Par défaut
    D6 était AnsiString
    DXE3 est UnicodeString

    utilise explicitement une AnsiString<1251>
    1251 CP1251
    1252 c'est pour le latin-1

    Puis affecte cette AnsiString<1251> à ton TEdit

    Il doit exister une syntaxe plus légère mais je ne l'a connais pas

  3. #3
    Membre habitué

    Inscrit en
    Février 2005
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 356
    Points : 175
    Points
    175
    Par défaut
    J'avais utilisé cette méthode mais ça ne fonctionnait pas.

    Il manque peut-être quelque chose :
    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
     
    type
    CyrillicString = type Ansistring(1251);
     
    ...
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      chaine : CyrillicString;
    begin
      chaine:= 'Îøèáêà âî âðåìÿ ïðîöåäóðû';
      Edit1.Text:= chaine;
      //Le charset ne change rien
      //Edit1.Font.Charset:= RUSSIAN_CHARSET;
    end;

  4. #4
    Membre habitué

    Inscrit en
    Février 2005
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 356
    Points : 175
    Points
    175
    Par défaut
    Voici l'exemple dans Delphi 6.


  5. #5
    Membre habitué

    Inscrit en
    Février 2005
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 356
    Points : 175
    Points
    175
    Par défaut
    J'ai trouvé la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.Button1Click(Sender: TObject);
    var
      encLatin : TEncoding;
      encRusse : TEncoding;
     
      chainetmp: String;
    begin
      encLatin:= TEncoding.GetEncoding(1252);
      encRusse:= TEncoding.GetEncoding(1251);
     
      chainetmp := 'Îøèáêà âî âðåìÿ ïðîöåäóðû';
      Edit1.Text:= String(encRusse.GetChars(encLatin.GetBytes(chaineTmp)));
    end;
    Par contre quand je passe par une variable intermédiaire, ça ne fonctionne pas, j'ai une violation d'accès au clic du bouton (en fin de procédure en mode debug).

    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
      encLatin : TEncoding;
      encRusse : TEncoding;
     
      chainetmp1: String;
      chainetmp2: String;
    begin
      encLatin:= TEncoding.GetEncoding(1252);
      encRusse:= TEncoding.GetEncoding(1251);
     
      chainetmp1 := 'Îøèáêà âî âðåìÿ ïðîöåäóðû';
      chainetmp2 := string(encRusse.GetChars(encLatin.GetBytes(chainetmp1)));
      Edit1.Text:= chainetmp2;
    end;
    Savez-vous pourquoi ?

  6. #6
    Membre habitué

    Inscrit en
    Février 2005
    Messages
    356
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 356
    Points : 175
    Points
    175
    Par défaut
    Ça fonctionne en faisant ceci :
    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
    procedure TForm1.Button1Click(Sender: TObject);
    var
      encLatin : TEncoding;
      encRusse : TEncoding;
     
      chainetmp1: String;
      chainetmp2: String;
    begin
      encLatin:= TEncoding.GetEncoding(1252);
      encRusse:= TEncoding.GetEncoding(1251);
     
      chainetmp1 := 'Ïðèíòåð äëÿ äîêóìåíòîâ êîíòàêòíîãî öåíòðà';
      chainetmp2 := strnew(PChar(encRusse.GetChars(encLatin.GetBytes(chainetmp1))));
      Edit1.Text:= chainetmp2;
      Edit2.Text:= Edit1.Text;
    end;
    Vous en pensez quoi ?

Discussions similaires

  1. Problème affichage d'une liste chainée
    Par Nardjesse dans le forum Débuter
    Réponses: 8
    Dernier message: 06/01/2013, 11h51
  2. Réponses: 15
    Dernier message: 11/09/2007, 18h36
  3. [MySQL] problème d'affichage chaine de texte
    Par tcompagnon dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 02/06/2007, 19h56
  4. [problème] affichage de chaines
    Par 123quatre dans le forum C
    Réponses: 12
    Dernier message: 07/01/2006, 20h47
  5. [DOS] Problème affichage de DOS dans un Memo
    Par Pedro dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 25/06/2004, 13h31

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