Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2640 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C++] Bug lors de la création d'un fichier -> devient unicode

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Bug lors de la création d'un fichier -> devient unicode

n°1079123
youmoussa
Ecrou-vis
Posté le 11-05-2005 à 11:33:35  profilanswer
 

Au boulot, notre soft comporte un module de reporting qui existe depuis la nuit des temps (donc qui a fait ses preuves, donc qui est codé comme dans l'ancien temps).
 
Un bug vient de remonter dessus, et je cherche les causes possibles à ce probleme :
le fichier texte généré sur une base d'un client devient un fichier unicode dans certains cas.
 
Sachant qu'aucune fonction générant de l'unicode n'est appelée (les fonctions utilisées sont fopen, fclose, fputc et fputs), qu'est ce qui peut faire qu'on arrive à un tel cas ?
 
edit : petit oubli.. VC++ 6 sous  Win XP


Message édité par youmoussa le 11-05-2005 à 11:40:03
mood
Publicité
Posté le 11-05-2005 à 11:33:35  profilanswer
 

n°1079133
HelloWorld
Salut tout le monde!
Posté le 11-05-2005 à 11:38:19  profilanswer
 

Quel OS / compilo ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1079137
youmoussa
Ecrou-vis
Posté le 11-05-2005 à 11:40:18  profilanswer
 

j'ai édité

n°1079189
HelloWorld
Salut tout le monde!
Posté le 11-05-2005 à 12:02:39  profilanswer
 

Ce client il a l'OS en quel langue ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1079263
youmoussa
Ecrou-vis
Posté le 11-05-2005 à 12:47:21  profilanswer
 

C'est un client anglais, donc je suppose en anglais. On reproduit le bug chez nous avec nos OS en francais.

n°1079334
IrmatDen
Posté le 11-05-2005 à 13:51:39  profilanswer
 

Quelle démarche est suivie pour reproduire le bug ?

n°1079343
youmoussa
Ecrou-vis
Posté le 11-05-2005 à 13:55:26  profilanswer
 

ben lancer la fonction de report.. le truc strange, c'est qu'en jouant sur les paramètres du report (nombre de périodes à exporter par ex) des fois ca marche, des fois ca marche pas..

n°1079594
HelloWorld
Salut tout le monde!
Posté le 11-05-2005 à 15:23:32  profilanswer
 

C'est tout le fichier qui est unicode ? T'écris toujours la même chose ? Tu récupères d'où ce qui est affiché ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1079879
youmoussa
Ecrou-vis
Posté le 11-05-2005 à 17:48:58  profilanswer
 

Ce n'est pas qqch que je maitrise, mais visiblement, soit un fichier est en unicode soit il ne l'est pas, il ne peut pas l'être à moitié.
 
Qu'entends tu par "écrire la même chose ?"
 
Tout vient de la base

n°1079908
HelloWorld
Salut tout le monde!
Posté le 11-05-2005 à 18:11:36  profilanswer
 

C'est quel genre d'info qui vient de ta base ? Tu écris ça comment ?
Ton fichier est ouvert en mode binaire ?


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
mood
Publicité
Posté le 11-05-2005 à 18:11:36  profilanswer
 

n°1085113
youmoussa
Ecrou-vis
Posté le 16-05-2005 à 10:21:10  profilanswer
 

Bon, j'ai à moitié résolu mon pb..
 
petite démo : ouvrez un notepad (et pas wordpad), tapez dedans la séquence :

70,170,170,170,170,170,170


 
sauvegardez et fermer notepad. Rouvrez le fichier : il l'a converti en unicode/multibytes..
 
pour éviter ce pb, on doit écrire notre fichier en utilisant le mode binaire et non plus texte..

n°1085119
Elmoricq
Modérateur
Posté le 16-05-2005 à 10:24:25  profilanswer
 

Ca ne le fait pas avec un saut de ligne à la fin du fichier.

n°1085173
youmoussa
Ecrou-vis
Posté le 16-05-2005 à 10:58:35  profilanswer
 

oui, mais ca ne permet pas de corriger le pb (ce n'est pas la seule séquence du fichier qui provoque ca, et ttes les lignes du fichier généré finissent par un retour à la ligne..)

n°1085174
youmoussa
Ecrou-vis
Posté le 16-05-2005 à 10:59:16  profilanswer
 

enfin, moi ca me troue le cul qd même qu'une pauvre suite de valeur numérique puisse foutre la merde comme ca..

n°1085195
youmoussa
Ecrou-vis
Posté le 16-05-2005 à 11:10:14  profilanswer
 

et j'oubliais une partie de l'explication : passage de la séquence sur la fonction IsTextUnicode
 
http://msdn.microsoft.com/library/ [...] e_81np.asp
 
Ca renvoie IS_TEXT_UNICODE_STATISTICS, pour lequel il est précisé  
 

Citation :

the IS_TEXT_UNICODE_STATISTICS and IS_TEXT_UNICODE_REVERSE_STATISTICS tests use statistical analysis. These tests are not foolproof. The statistical tests assume certain amounts of variation between low and high bytes in a string, and some ASCII strings can slip through. For example, if lpBuffer points to the ASCII string 0x41, 0x0A, 0x0D, 0x1D (A\n\r^Z), the string passes the IS_TEXT_UNICODE_STATISTICS test, though failure would be preferable.

n°1085387
Elmoricq
Modérateur
Posté le 16-05-2005 à 14:22:35  profilanswer
 

Mouais.
 
Donc en gros, la seule "méthode" valable serait de jouer au chat et à la souris avec l'algorithme de détection, et d'ajouter un truc en début de fichier pour que ce dernier ne fasse pas la conversion. Genre un espace en tout début de fichier, une ligne vide ou je ne sais quoi qui fonctionnerait à tous les coups.
 
Quand même, c'est pas génial. J'aime pas quand ça tient avec des bouts de ficelle...


Message édité par Elmoricq le 16-05-2005 à 14:23:42
n°1085417
youmoussa
Ecrou-vis
Posté le 16-05-2005 à 14:40:21  profilanswer
 

m'en parle pas... t'es content de débugger un truc pareil.. ca veut surtout dire que les fichiers textes, tu peux pas les écrire en mode texte.. si tu veux être sur, tu dois l'écrire en binaire..

n°1086181
HelloWorld
Salut tout le monde!
Posté le 16-05-2005 à 23:36:56  profilanswer
 

Dans ton test c'est notepad qui se vautre à la réouverture du fichier. Il tente d'afficher de l'unicode, mais le fichier reste ANSI, sauf si tu le resauvegardes (car travaillant en unicode).
notepad importe IsTextUnicode, ceci pourrait expliquer cela. Il ouvre le fichier, appelle IsTextUnicode pour savoir si c'est de l'unicode, et adapte l'affichage.
Dans ton cas, je ne vois pas trop en quoi cela te concerne. Chez moi ce programme se comporte correctement:

Code :
  1. #include <stdio.h>
  2. int main()
  3. {
  4.     FILE * file = fopen( "file.txt", "w" );
  5.     fprintf( file, "70,170,170,170,170,170,170" );
  6.     fclose( file );
  7.     file = fopen( "file.txt", "r" );
  8.     char buffer[ 100 ];
  9.     fgets( buffer, sizeof( buffer ), file );
  10.     printf( buffer );
  11.     fclose( file );
  12. }


Par contre notepad affiche n'importe quoi si on ouvre le fichier.
Pour infos:
http://msdn.microsoft.com/library/ [...] _Modes.asp


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C++] Bug lors de la création d'un fichier -> devient unicode

 

Sujets relatifs
récupération de noms de fichierCréer un fichier PDF avec PHP
MySql et gros fichier de requeteCreation d'un fichier .reg
creation d'executable sous cygwin[C] Effacement d'une structure dans un fichier binaire
Création d'une dll sous VBgestion de fichier et mode append
[JAVA] petite explication sur le chargement d'un fichier audio 
Plus de sujets relatifs à : [C++] Bug lors de la création d'un fichier -> devient unicode


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR