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

C Discussion :

Ecrire des accents dans un fichier


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Points : 73
    Points
    73
    Par défaut Ecrire des accents dans un fichier
    Je travaille avec gtk et je récupère des chaines de caractères en gchar que je transforme en un char* mais lorsque j'écris dans le fichier il refuse d'intégrer correctement les caractères à accents correctement.

    Lorsque j'affiche la chaine de caractère en char* sur une boite de dialogue avec gtk ca affiche les caractères accentués jimagine donc qu'il sagit de la fonction fwrite qui ne prend pas en compte les accents.

    Comment puis-je donc faire pour écrire des accents dans un fichier ?? Merci

    Voici la portion de code si ca peut aidé

    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
     
    char c[128];
    .......
     
    typedef struct
    {
      .....
      FILE *g=NULL;
      .....
    } Tags
     
    Tags *tag;
    ....
    tag =  malloc(sizeof(Tags));
     
     
    for(i=0;i<128;i++)
            {
                fwrite(&c[i],sizeof(char),1,tag->g);
            }
    la chaine c contiendrait donc des caractères accentués.

  2. #2
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 36
    Points : 40
    Points
    40
    Par défaut
    Il te faut convertir ta chaîne en utf8 pour afficher les caractères accentués,
    enfin c'est comme ça que je procède (si quelqu'un a mieux)
    par ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    /*Initialisation de la chaîne de caractère pour le label avec conversion -> UTF8 (pour carac accentués) */
     
        strLabel = g_locale_to_utf8("Dèéèéèéèé", -1, NULL, NULL, NULL);
     
        //Initialisation objet Label 
     
        pLabel = gtk_label_new(strLabel) ;
    Edit : oups dans un fichier.. pas testé

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Points : 73
    Points
    73
    Par défaut
    Oui c écriture dans un fichier !!!

  4. #4
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 36
    Points : 40
    Points
    40
    Par défaut
    humm et quid de le lire sous le format utf8 avec un éditeur de texte potable ?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 182
    Points : 73
    Points
    73
    Par défaut
    oula tu va loin mon ami en plus ca a rien a voir ac la lecture moi ce qui m'importe s'est d'écrire dans le fichier des caractères accentués !!!

  6. #6
    Membre du Club
    Inscrit en
    Août 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 36
    Points : 40
    Points
    40
    Par défaut
    suis pas expert mais de ce que j'ai pu comprendre fwrite écrit des données "brutes" dans le fichier; pour écrire des caractères ou du texte on utilise fputc pour l'insertion caractères par caractères ou fputs pour une chaîne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include <stdlib.h>
    #include <stdio.h>
     
    int main (void){
    	FILE* monfichier;
    	monfichier = fopen("test.txt","w+");
    	fputs("Salut la praline tu as bien utilisé fputs pour ton code ?",monfichier);
    	fclose(monfichier);
    	return 0;
    }

  7. #7
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Points : 1 381
    Points
    1 381
    Par défaut
    Petite chose que je vois, au lieu de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(i=0;i<128;i++)
            {
                fwrite(&c[i],sizeof(char),1,tag->g);
            }
    tu peux simplifier par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite(c,sizeof(char),128,tag->g);
    Ensuite, si tu as un problème d'écriture d'accents, c'est que les codes des caractères de ta variable c ne sont pas les mêmes que les codes de caractères utilisés par ton éditeur de texte. Essaye d'analyser le code hexadécimal de ton caractère (printf("%x", c[3]) par ex), et fais la comparaison avec le jeu de caractère utilisé par ta machine.
    Tout dépend du character set à mon avis. Celui de ton application est différent de celui de ton éditeur de texte.

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 572
    Points
    41 572
    Par défaut
    Une autre partie du problème de charset, c'est qu'un fichier texte UTF-8 commence avec une Byte Order Mark (BOM).

    Un fichier avec BOM indique un fichier en unicode, un fichier sans BOM suppose un fichier dans l'encodage par défaut du système.
    Donc, si un fichier UTF-8 est enregistré sans commencer par la BOM correspondante (octets EF BB BF), les accents ne seront pas reconnus par la plupart des éditeurs de texte sous Windows.
    (Certains systèmes unixoïdes sont toujours UTF-8, ou certains éditeurs utilisent des heuristiques pour reconnaitre, car la BOM est déconseillée sous les systèmes unixoïdes : elle peut gêner la reconnaissance des caractères "#!" d'un fichier texte).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Février 2008
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 67
    Points : 31
    Points
    31
    Par défaut
    Hello,

    Je me permets de relancer la discussion à ce sujet, rencontrant presque le même problème.

    A la différence d'au dessus, je génère mon fichier.txt à l'aide d'un system commande "type". Le hic, c'est que ce qu'on m'envoi génère des accents, et au finale, dans mon fichier.txt, les accents n'apparaissent pas (logique, car non conforme au C) et sont remplacés par d'autres caractères..

    Voici le code :

    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
     
    static void searchchar(char *chaine);
     
    int main(int argc, char *argv[])
    {
        remove("testip.txt");
        printf("\n[ Tests standards ]\n\n ");
     
        char ip[20] = {0};
        printf("\nAdresse ip de l'hote : ");
        fgets(ip, sizeof ip, stdin);
        searchchar(ip);
     
        char out[] = " >> testip.txt";
        char commande [512];
     
        strcpy(commande, "ping -n 10 "); 
        strcat(commande, ip);
        strcat(commande, out);
     
        int ret = system (commande);
     
        if (ret==1)
        {
           printf("\nHote %s injoignable \n\n", ip);
           system ("type testip.txt");
        }
        else
        {
           system ("type testip.txt");
        }
     
        char commande2 [512];
        strcpy(commande2, "nbtstat -A ");
        strcat(commande2, ip);
        strcat(commande2, out);
     
        int ret2 = system (commande2);
     
        if (ret2==1)
        {
           printf("Recuperation de la MAC => Erreur !\n\n");
           system ("type testip.txt");
        }
        else
        {
           system ("type testip.txt");
        }
     
        char commande3 [512];
        strcpy(commande3, "nslookup ");
        strcat(commande3, ip);
        strcat(commande3, out);
     
        int ret3 = system (commande3);
        if (ret3==1)
        {
           printf("nslookup => Erreur !\n\n");
           system ("type testip.txt");
        }
        else
        {
           system ("type testip.txt");
        }
     
        char commande4 [512];
        strcpy(commande4, "tracert ");
        strcat(commande4, ip);
        strcat(commande4, out);
     
        int ret4 = system (commande4);
        if (ret4==1)
        {
           printf("tracert => Erreur !\n\n");
           system("pause");
           system ("type testip.txt");
        }
        else
        {
           system ("type testip.txt");
        }
     
    printf("\n");
    system("pause");
    return 0;
    }
     
    static void searchchar(char *chaine)
    {
        char *p = strchr(chaine, '\n');
     
        if (p)
        {
            *p = 0;
        }
    }
    Comment pourrais-je solutionner mon problème ?

Discussions similaires

  1. Récupérer des accents dans un fichier par getline
    Par wistiti1234 dans le forum C++
    Réponses: 48
    Dernier message: 09/06/2008, 14h53
  2. Ecrire des objets dans un fichier
    Par Edta dans le forum Langage
    Réponses: 2
    Dernier message: 14/05/2008, 04h29
  3. Ecrire des entiers dans un fichier local
    Par Rodrigue dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 21/03/2008, 16h17
  4. Lire et ecrire des variables dans un fichier texte
    Par Lynecoln dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 26/02/2007, 14h16
  5. Réponses: 1
    Dernier message: 22/12/2005, 15h45

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