J'ai rencontré deux problèmes avec la sérialisation en mode texte. Le premier concerne l'encodage des caractères accentués et le second le type TDate.
L'encodage des caractères accentués est complètement corrompu dans le fichier de sérialisation. Voici le début du fichier de sérialisation qui ne se désérialise pas convenablement. Utiliser ou ne pas utiliser {$codepage utf8} n'a aucun effet sur le problème: le test unitaire foire en raison de l'encodage. Un ShowMessage confirme l'erreur d'encodage après la désérialisation. String, AnsiString ou UnicodeString, n'a aucune incidence sur le problème.
Deuxième problème, WriteDate déclenche une exception lors de l'écriture de la date. Je peux contourner ce problème en transformant la date en chaîne de caractères en utilisant DateToStr.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 object TInfoDeBaseTournoi SerializeInfoDeBaseTournoi = ( 'Championnat Ouvert du Qu'#195#169'bec' 'Montr'#195#169'al' 'e:\bozo\le\Clown\'
La sérialisation binaire des caractères accentués et des dates ne cause aucun problème. Cela me laisse perplexe, est-ce un bogue ?
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 procedure TInfoDeBaseTournoi.WriteInfo(Writer: TWriter); begin with Writer do begin WriteListBegin; WriteString(NomDuTournoi_A); WriteString(LieuDuTournoi_A); WriteString(CheminVersCeTournoi_A); WriteString(NomDelArbitrePrincipal_A); //WriteDate(DateDuDebut_A); WriteString(DateToStr(DateDuDebut_A)); //WriteDate(DateDeLaFin_A); WriteBoolean(LeTournoiEstTermine_A); WriteInteger(NombreDeSections_A); //WriteDate(DateDeLaCreation_A); WriteListEnd; end;
Partager