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

Windows Forms Discussion :

Accents + Fichier Texte :-(


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Points : 19
    Points
    19
    Par défaut Accents + Fichier Texte :-(
    Bonsoir,
    J'ai un problème dans la lecture/écriture de fichier texte.

    Dans mon fichier en entrée j'ai des caractères accentués
    J'ai notamment une chaine comme ceci "* rép *".
    Si je fais un TYPE en ligne de commande, je vois "* rùp *" (l'accent sur le u est même inversé).

    A la lecture je faisais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    StreamReader fSource1 = File.OpenText(sFileName);
    input = fSource1.ReadLine();
    et à l'écriture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FileInfo fCible = new FileInfo(sfCible);
    StreamWriter fCibleTxt = fCible.CreateText();
    fCibleTxt.WriteLine(input);
    J'ai cru comprendre qu'il fallait préciser l'encodage à la lecture comme à l'écriture mais je n'arrive pas à trouver une solution qui fonctionne...
    Déjà rien qu'à la lecture mes accents sont remplacés...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    StreamReader fSource1 = new StreamReader(sFileName,System.Text.Encoding.Default);
    fSource1 = File.OpenText(sFileName);
    input = fSource1.ReadLine();
    Je suis débutant en C# et je suis un peu perdu.
    Quelqu'un aurait-il une idée ?
    Merci d'avance,
    BigFellow

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    essaye d'autre encoding que default jusqu'à trouver le bon
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Expert éminent Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Points : 7 903
    Points
    7 903
    Par défaut
    +1, Essaye celui_ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ... new StreamReader(sFileName,Encoding.GetEncoding("iso-8859-1"));
    " Le croquemitaine ! Aaaaaah ! Où ça ? " ©Homer Simpson

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Points : 19
    Points
    19
    Par défaut J'ai déjà essayé...
    Merci pour vos réponses mais j'ai déjà fait ces tests : toutes les possibilités offertes par le Encoding. y compris Encoding.GetEncoding("iso-8859-1") et cela ne change strictement rien au résultat.
    Cordialement,
    BigFellow

  5. #5
    Membre averti Avatar de _PascalC_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 220
    Points : 428
    Points
    428
    Par défaut
    salut, il faut que l'encodage utilisé à la lecture soit le même que celui utilisé au moment de l'écriture. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    string filename = "c:\\test.txt";
    Encoding encoding = Encoding.UTF8;
     
    StreamWriter sw = new StreamWriter(filename, false, encoding);
    sw.WriteLine("äïùö");
    sw.Dispose();
     
    StreamReader sr = new StreamReader(filename, encoding);
    string s = sr.ReadLine(); //s contient bien äïùö 
    sr.Dispose();

  6. #6
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    ca je pense qu'il s'en doute ^^ mais ca doit pas être lui qui a créé le fichier ...


    il faudrait déjà connaitre le codage utilisé dans le fichier
    essaye de l'ouvrir avec textpad, il t'indiquera le codage utilisé (c'est un très bon logiciel gratuit pour manipuler des fichiers texte) (faire affichage/propriétés du document)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Points : 19
    Points
    19
    Par défaut Textpad m'indique ANSI comme code set
    Habituellement j'utilise Notepad++ et la version ANSI m'ouvre donc bien le fichier correctement.

  8. #8
    Membre averti Avatar de _PascalC_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 220
    Points : 428
    Points
    428
    Par défaut
    Pol63> j'ai préféré faire une piqure de rappel car dans son exemple il fait l'opération d'écriture et de lecture. De plus, dans son code d'écriture l'encodage n'est pas spécifié. Ta remarque est en tout cas intéressante dans le cas ou effectivement il n'est pas à l'origine du fichier à lire

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2008
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 25
    Points : 19
    Points
    19
    Par défaut Finalement l'impossible est faisable...
    ... mais il demande plus de temps.

    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
     
     
                    try
                    {
                        // Note: On lit l'intégralité du fichier dans une tableau d'octets 
                        FileStream fs = new FileStream(sFileName, FileMode.Open, FileAccess.Read);
                        BinaryReader br = new BinaryReader(fs);
     
                        byte[] bArray = new byte[br.BaseStream.Length];
                        bArray = br.ReadBytes(Convert.ToInt32(br.BaseStream.Length));
                        //StreamReader fSource1 = new StreamReader(sFileName, System.Text.Encoding.GetEncoding("iso-8859-1"));
                        //fSource1 = File.OpenText(sFileName);
     
                        string input = null;
                        dgvCMA.RowCount = 10;
                        dgvCMA.ColumnCount = 1;
                        cbColonne.Items.Clear();
                        int iPointeur = 0;
                        for (int iRecord = 1; iRecord <= 10; iRecord++)
                        {
                            string sRecord = null;
                            while ((bArray[iPointeur] != 13) && (bArray[iPointeur] != 26))
                            {
                                sRecord = sRecord + (char)bArray[iPointeur];
                                iPointeur++;
                            }
                            iPointeur = iPointeur + 2;
     
                            //input = fSource1.ReadLine();
                            input = sRecord;
                            if (input != null)
                            {
                                int iNbChamps = 0;
                                int iStart = 0;
                                for (int i = 0; i < input.Length; i++)
                                {
                                    if (input.Substring(i, 1) == sSepChamp)
                                    {
                                        iNbChamps = iNbChamps + 1;
                                        if (iRecord == 1)
                                        {
                                            dgvCMA.ColumnCount = dgvCMA.ColumnCount + 1;
                                            dgvCMA.Columns[iNbChamps - 1].HeaderText = "Colonne " + iNbChamps.ToString();
                                            if (input.Substring(iStart, 1) != tbDelimiteurTexte.Text)
                                            {
                                                cbColonne.Items.Add("Colonne " + iNbChamps.ToString());
                                            }
                                        }
                                        dgvCMA[iNbChamps - 1, iRecord - 1].Value = input.Substring(iStart, i - iStart);
                                        iStart = i + 1;
                                    }
    J'ai remplacé la lecture du fichier texte par une lecture de "bytes" que je reconvertis en enregistrement de "type" texte et là, au miracle, les accents sont bien la, à l'écran comme dans le fichier en sortie.
    Cordialement,
    BigFellow

  10. #10
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut J'ai des doutes !!
    Salut

    J'ai des doutes....
    Envoie un peu un morceau signifiant de ton fichier en piece jointe
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

Discussions similaires

  1. Accents dans fichier texte vers Windows
    Par Bouillon dans le forum Langage
    Réponses: 6
    Dernier message: 03/01/2009, 13h01
  2. généré un fichier texte qui prend en ecompte les accents
    Par Ohemeg dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 21/02/2008, 09h43
  3. Fichier texte et accents
    Par jaybriss dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 27/07/2006, 19h39
  4. Gestion accent fichier texte dynamique
    Par delavega dans le forum Flash
    Réponses: 2
    Dernier message: 29/06/2006, 17h43
  5. Fichiers texte sans accents
    Par mika dans le forum Langage
    Réponses: 5
    Dernier message: 03/11/2004, 16h42

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