Bonjour
J'ai récupéré sur le net deux fonctions de compression/décompression de chaînes.
La chaîne est compressée par le serveur pour être envoyée au client en JSON par datasnap.
Le serveur est toujours utilisé sous Windows.
Le client peut-être utilisé dans sa version Windows ou IOS.
La chaîne compressée sous Windows et récupérée par le client sous Windows ne pose aucun problème.
Mais la même chaîne récupérée par le client en version IOS renvoie une erreur de décompression de chaîne.
sur vDecompressor.Read---------------------------
Notification des exceptions du débogueur
---------------------------
Le projet truc a déclenché la classe d'exception EZDecompressionError avec le message 'data error'.
---------------------------
Arrêter Continuer Aide
---------------------------
Quelqu'un aurait une idée sur l'origine du problème ?
Papy !
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 // Compresse la chaîne reçue en paramètre et renvoie le résultat function Compressed(ASrc: string): string; var B: array[1..2048] of byte; R: Integer; vSrc: TStream; // source stream vDest: TStream; // destination stream vCompressor: TStream; // compression stream begin vDest := TStringStream.Create(''); try vCompressor := TCompressionStream.Create(clMax, vDest); try vSrc := TStringStream.Create(ASrc); try repeat R := vSrc.Read(B, SizeOf(B)); if R > 0 then vCompressor.Write(B, R); until R < SizeOf(B); finally vSrc.Free; end; finally vCompressor.Free; end; finally vDest.Seek(0, 0); Result := TStringStream(vDest).DataString; vDest.Free; end; end; // Décompresse la chaîne reçue en paramètre et renvoie le résultat function Decompressed(ASrc: string): string; var B: array[1..2048] of byte; R: Integer; vSrc: TStream; // source stream vDest: TStream; // destination stream vDecompressor: TStream; // compression stream begin vSrc := TStringStream.Create(ASrc); try vDecompressor := TDecompressionStream.Create(vSrc); try vDest := TStringStream.Create(''); try repeat R := vDecompressor.Read(B, SizeOf(B)); if R > 0 then vDest.Write(B, R); until R < SizeOf(B); finally Result := TStringStream(vDest).DataString; FreeAndNil(vDest); end; finally FreeAndNil(vDecompressor); end; finally FreeAndNil(vSrc); end; end;
Partager