Bug lors de la création d'un fichier -> devient unicode [C++] - C++ - Programmation
Marsh Posté le 11-05-2005 à 11:38:19
ReplyMarsh Posté le 11-05-2005 à 12:02:39
ReplyMarsh Posté le 11-05-2005 à 12:47:21
C'est un client anglais, donc je suppose en anglais. On reproduit le bug chez nous avec nos OS en francais.
Marsh Posté le 11-05-2005 à 13:55:26
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..
Marsh Posté le 11-05-2005 à 15:23:32
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é ?
Marsh Posté le 11-05-2005 à 17:48:58
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
Marsh Posté le 11-05-2005 à 18:11:36
C'est quel genre d'info qui vient de ta base ? Tu écris ça comment ?
Ton fichier est ouvert en mode binaire ?
Marsh Posté le 16-05-2005 à 10:21:10
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..
Marsh Posté le 16-05-2005 à 10:24:25
Ca ne le fait pas avec un saut de ligne à la fin du fichier.
Marsh Posté le 16-05-2005 à 10:58:35
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..)
Marsh Posté le 16-05-2005 à 10:59:16
enfin, moi ca me troue le cul qd même qu'une pauvre suite de valeur numérique puisse foutre la merde comme ca..
Marsh Posté le 16-05-2005 à 11:10:14
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. |
Marsh Posté le 16-05-2005 à 14:22:35
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...
Marsh Posté le 16-05-2005 à 14:40:21
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..
Marsh Posté le 16-05-2005 à 23:36:56
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 :
|
Par contre notepad affiche n'importe quoi si on ouvre le fichier.
Pour infos:
http://msdn.microsoft.com/library/ [...] _Modes.asp
Marsh Posté le 11-05-2005 à 11:33:35
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