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++Builder Discussion :

Problème d'encodage ascii


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 29
    Par défaut Problème d'encodage ascii
    Bonjour

    J'utilise C++ Builder 6 et je rencontre un souci d'écriture dans des fichiers.

    Dans le programme que je fais actuellement, j'exécute le bout de code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FILE *txtFile;
    txtFile = fopen("file.txt","w");
    fprintf(txtFile,"toto");
    fclose(txtFile);
    J'ouvre ensuite le fichier file.txt. L'affichage ascii montre bien "toto" mais l'affichage hexa me montre "FF FE 74 00 6F 00 74 00 6F 00"

    Dans des programmes précédents, le même code m'affichait également "toto" en ascii mais "74 6F 74 6F" en hexa.

    Je pense qu'il s'agit d'un problème d'encodage du fichier texte mais je n'ai pas la moindre de là où cela peut se situer car je n'ai jamais changer ce genre d'option.

    Pourriez-vous éclairer ma lanterne ?
    Merci d'avance.

  2. #2
    Membre émérite Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 890
    Par défaut
    C'est le BOM (Byte Order Mark) parce que le fichier est en unicode:

    http://fr.wikipedia.org/wiki/Marque_d'ordre_des_octets

  3. #3
    Membre émérite
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    Par défaut
    Salut!

    Citation Envoyé par Milowen Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FILE *txtFile;
    txtFile = fopen("file.txt","w");
    fprintf(txtFile,"toto");
    fclose(txtFile);
    T'es sûre qu'avec ce code t'obtient ce résultat, ou bien un autre code similaire !?
    Du genre la chaine "toto" est lu à partir d'une ressource quelconque, et écrite par la suite dans ton fichier.txt

    Remarque: je ne me souvient pas avoir vu que C++ Builder 6 prenait en charge l'UNICODE.


    Cordialement.

  4. #4
    Membre émérite Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 890
    Par défaut
    Citation Envoyé par Interruption13h Voir le message
    Remarque: je ne me souvient pas avoir vu que C++ Builder 6 prenait en charge l'UNICODE.
    Ce n'est pas Builder qui interprète le BOM (surtout pas Builder 6 ), mais le fopen de windows:

    If the file is already in existence and is opened for reading or appending, the Byte Order Mark (BOM) is used to determine the correct encoding.

  5. #5
    Membre émérite
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    Par défaut
    Citation Envoyé par 10_GOTO_10 Voir le message
    Ce n'est pas Builder qui interprète le BOM (surtout pas Builder 6 ), mais le fopen de windows:
    Oui, sauf que ça c'est uniquement dans Visual Studio.

    D’ailleur on peut même spécifier l'encodage lors de l'ouverture du fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fopen("newfile.txt", "rw, ccs=<encoding>");
    Mais pas dans BCB6.

    A+

  6. #6
    Membre émérite Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    890
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 890
    Par défaut
    Citation Envoyé par Interruption13h Voir le message
    Oui, sauf que ça c'est uniquement dans Visual Studio.

    Mais pas dans BCB6.
    Mmoui, effectivement, je viens de faire le test.

    La chaîne ne peut pas venir non plus d'une autre ressource, comme tu le suggérait, puisqu'elle contient des \0 et que fprint attend des char *

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    FILE *txtFile;
    txtFile = fopen("file.txt","w");
    fprintf(txtFile, "\xFF\xFE\x74\x00\x6F\x00\x74\x00\x6F\x00");
    fclose(txtFile);
    Enregistre ""FF FE 74"

    Peut-être que le fichier a ensuite été ouvert par un éditeur qui enregistre automatiquement en UNICODE ?

  7. #7
    Membre émérite
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    Par défaut
    Citation Envoyé par 10_GOTO_10 Voir le message
    La chaîne ne peut pas venir non plus d'une autre ressource, comme tu le suggérait, puisqu'elle contient des \0 et que fprint attend des char *
    Autant pour moi :p
    J'avais tout à fait omis ces zéro

    Citation Envoyé par 10_GOTO_10 Voir le message
    Peut-être que le fichier a ensuite été ouvert par un éditeur qui enregistre automatiquement en UNICODE ?
    ça doit sûrement être ça.

    A+

  8. #8
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Par défaut fopen("newfile.txt", "rw, ccs=UNICODE"); ne marche pas sous builder 2009
    salut à tous,
    quelle est la différence en entre fopen("newfile.txt", "rw, ccs=<encoding>"); et fopen("newfile.txt", "rw, ccs=UNICODE"); pour builder c++ 2009.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème d'encodage ascii
    Par khadi8 dans le forum Général Python
    Réponses: 1
    Dernier message: 12/04/2014, 22h30
  2. Probléme D'encodage ASCII
    Par Frank_Rook dans le forum Général Python
    Réponses: 2
    Dernier message: 23/03/2012, 10h40
  3. Problème d'encodage en Unicode
    Par Skreo dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 28/12/2005, 10h43
  4. Problème d'encodage sur MySql 4.1
    Par Blanchet dans le forum Outils
    Réponses: 1
    Dernier message: 04/12/2005, 04h53
  5. [XML::PARSER] Problème d'encodage
    Par frangin2003 dans le forum Modules
    Réponses: 13
    Dernier message: 05/09/2005, 14h59

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