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 :

Lire des caractères spéciaux dans un fichier


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2013
    Messages : 35
    Par défaut Lire des caractères spéciaux dans un fichier
    bonjour a tous ,
    voila je dois lire ceci :" a  Ò •n}ã øê¶«—…—"
    le probleme c 'est qu'avec ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    fichier1=fopen(path1,"rb");
    fgets(chaine1,sizeof(chaine1),fichier1);
    fclose(fichier1);
    j'ai mis rb mais ca refuse de lire ces symboles , savez vous comment faire?
    merci d'avance

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    fgets() lit du texte. Il faut utiliser fread() pour lire du binaire.

    Ou alors ce tourner vers de wchar_t pour ne pas lire du simple ASCII. Exemple.

  3. #3
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2013
    Messages : 35
    Par défaut probleme avec fread
    voila j'ai essayé ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    fichier1=fopen(path1,"rb");
    fread(&chaine1,sizeof(chaine1),1000,fichier1);
    fclose(fichier1);
    cout<<chaine1<<endl;
    mais ca marche pas non plus ,j'ai peut etre fait une erreur mais sur internet j'ai lu ceci plus ou moins :s ? et ca ne lis plus le texte :"salut ca va "

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    • On ne connait pas la déclaration / définition de ton buffer, on ne peut pas savoir si tu lis correctement.
    • Tu mélanges des fonctions normalement utilisées uniquement en C avec des opérateurs purement C++. Bien que ces fonctions soient correctes en C++, elles sont à ma connaissance peu utilisées. Pourquoi faire cette "mixture" de C et de C++ ?
    • Tu lis du binaire et tu veux afficher du texte, ça ne me semble pas cohérent.
    • Tu n'as jamais parlé d'un texte "salut ca va", que vient-il faire là ?


    Plus globalement, il serait temps de nous expliquer ce que tu veux vraiment faire pour qu'on te donne une vraie réponse

  5. #5
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Août 2013
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2013
    Messages : 35
    Par défaut
    alors concretement : je dois lire un fichier tel que:
    "voici le code :øê¶«—…—"
    donc ca melange du texte et en meme temps d'étrange symbole .
    je veux mettre ca dans une chaine de caractere tel que:
    et ensuite me l'envoyer en mysql , mais chaine1 ne veut pas contenir :"voici le code :øê¶«—…—"

    voila mon probleme

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut
    Si tu avais lu de manière attentive mon premier message, tu aurais sans doute suivi mon lien et trouvé une solution adaptée... Mais comme tu marques que tu es lycéen, je vais mettre ça sur le compte de la découverte du C

    Les char ne permettent pas de stocker (beaucoup) de caractères spéciaux car ils utilisent l'encodage ASCII, il faut utiliser des wchar_t pour cela (ils sont apparus avec le C99). Et il faut créer un fichier encodé en UTF-8 et non en ASCII.

    Autre problème : ta console ne sera sûrement pas capable d'imprimer correctement des caractères non ASCII. C'est en tout cas le cas avec mon Windows 7. Il y a sans doute une manip pour cela.

    Pour vérifier que la lecture marche si on a la flemme de changer le terminal, l'idée est donc de réécrire dans un fichier pour voir que tu as la même chose qu'au début.

    Exemple de 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
    #include <errno.h>
    #include <locale.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <wchar.h>
     
    int main(void) {
        errno = 0;
     
        wchar_t string[100];
        setlocale(LC_ALL, "");
     
        FILE * pfile = fopen("data.txt", "r");
        if(pfile == NULL)
        {
            perror("fopen data.txt");
            exit(EXIT_FAILURE);
        }
     
        fgetws(string, sizeof(string) / sizeof(string[0]), pfile); // might fail
        fclose(pfile);
     
        printf("String Entered: [%ls]: length: %d", string, wcslen(string)); // prints bad because CMD is not prepared for UTF-8
     
        pfile = fopen("copy.txt", "w");
        if(pfile == NULL)
        {
            perror("fopen copy.txt");
            exit(EXIT_FAILURE);
        }
     
        fprintf(pfile, "String Entered: [%ls]: length: %d", string, wcslen(string));
        fclose(pfile);
     
        return 0;
    }
    Il faudra faire attention lors de l'interfaçage avec MySQL pour les encodages (encore une fois...) mais mes compétences ne vont pas jusque là.

    PS : les fonctions utilisant des char ont leurs équivalents avec des wchar_t ou alors des formatteurs adaptés pour les fonctions comme printf() et son %ls. Voir par exemple pour fgets() : http://msdn.microsoft.com/en-us/library/c37dh6kf.aspx

  7. #7
    Membre chevronné
    Homme Profil pro
    Cadre informatique
    Inscrit en
    Avril 2013
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Cadre informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 183
    Par défaut
    Salut!

    Ton problème se ramène à gérer des caractères spéciaux codés dans un genre un peu embêtant qui, pour un néophyte, entraine la réaction suivante:

    En fait, un caractère spécial se résume juste en une séquence de bit que l'ordinateur reconnaît. Si il te les affiche c'est qu'il connait ce codage.
    Il suffit de faire le chemin inverse

    Si tu utilises ce site, tu auras une translation entre un codage (déjà existant) de tous les caractères spéciaux que tu as mentionné.

    Ensuite, existe-t'il une bibli qui fait déjà ça ou dois-tu le faire à la main, je ne peux t'en dire plus ^^

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/09/2010, 10h01
  2. [MySQL] Gestion des caractères spéciaux dans un update
    Par olivier94 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 01/03/2007, 17h13
  3. [C#] Caractères spéciaux dans un fichier
    Par KibitO dans le forum C#
    Réponses: 7
    Dernier message: 04/01/2007, 09h16
  4. Réponses: 15
    Dernier message: 04/01/2007, 08h47
  5. Réponses: 10
    Dernier message: 31/03/2006, 20h46

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