none
Problème d' affichage de caractères accentués à partir d'un StreamReader RRS feed

  • Question

  • Je voudrais créer une routine qui ouvre le fichier Commentaires.txt ( ce fichier contient 20 commentaires, chaque commentaire étant séparé par une ligne contenant uniquement le caractère '&' ), place chaque commentaire dans un tableau et affiche dans un richTextBox le commentaires souhaité.
    int ouvrecommentaires()
    {
              int i = 0; 
              array<String^>^ Tableaucommentaire = gcnew array<String^>(19);
              StreamReader^ fs = gcnew StreamReader(path[0] + "Commentaires.txt");
              String^ s = "";

            while ((s = fs->ReadLine()) != nullptr)
            {     
              if ( s != "&" )
              Tableaucommentaire[i] = Tableaucommentaire[i] + s ;
              else i = i + 1 ;
            }
            fs->Close();

            this->richTextBox1->Text =  Tableaucommentaire[1]; // Affichage du deuxième commentaire par exemple.
    return 0;
    }
    Malheureusement les caractères accentués ( à,é,è, ù ... ) ne s'affichent pas correctement. ( des petits carrés les remplacent ). Les retours à la ligne ne sont également pas respectés. Comment remédier à ce problème d'affichage.
    Merci pour votre réponse.


    MJ

    mercredi 17 septembre 2014 15:23

Réponses

  • C'est un pb d'encodage de votre fichier texte.
    Essayez différent encodage dans le constructeur de votre StreamReader avec par exemple System.Text.Encoding.GetEncoding("iso-8859-1") ou UTF8 ou UTF7, etc.

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mercredi 17 septembre 2014 16:16

Toutes les réponses

  • C'est un pb d'encodage de votre fichier texte.
    Essayez différent encodage dans le constructeur de votre StreamReader avec par exemple System.Text.Encoding.GetEncoding("iso-8859-1") ou UTF8 ou UTF7, etc.

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    mercredi 17 septembre 2014 16:16
  • Effectivement, cela semble être un problème d'encodage.

    Je pense avoir trouvé une solution :
    Pour les caractères accentués en ajoutant l'encodage UTF7 dans le flux StreamReader. ( UTF8 et UTF32 ne fonctionne pas !? )
    Pour les fin de ligne en ajoutant à la fin de chaque ligne lue le cractère d'échappement fin de ligne ( "\n" ).
    Pour les saut de ligne ( ligne vide ) j'ajoute en fin de ligne le caractère d'échappement retour chariot. ( "\r" )

    Nouveau code qui fonctionne :

    int ouvrecommentaires()
    {
     int i = 0; 
          array<String^>^ Tableaucommentaire = gcnew array<String^>(19);
           StreamReader^ fs = gcnew StreamReader(path[0] + "Commentaires.txt",System::Text::Encoding::UTF7);
            String^ s = "";
            while ((s = fs->ReadLine()) != nullptr)
            {     
              if ( s != "&" )
                   if ( s == "" ) 
                     {
                         Tableaucommentaire[i] = Tableaucommentaire[i] + s + "\r" ;
                      }
                    else Tableaucommentaire[i] = Tableaucommentaire[i] + s + "\n" ;
              else i = i + 1 ;
            }
            fs->Close();
            this->richTextBox1->Text =  Tableaucommentaire[1]; // Affichage du deuxième commentaire par exemple.
    return 0;
    }

    • Modifié tétard jeudi 18 septembre 2014 09:13
    jeudi 18 septembre 2014 09:06