J'ai un service web fonctionnant sous Windows Azure qui renvoie le JSON que je consomme dans mon application iPhone. Malheureusement, Windows Azure ne semble pas encore supporter la compression des réponses dynamiques (histoire longue), j'ai donc décidé de contourner ce problème en retournant un paquet JSON non compressé, qui contient une chaîne compressée (en utilisant GZIP).Compresser/décompresser NSString dans l'objectif-c (iphone) en utilisant GZIP ou dégonfler
par exemple
{"Error":null,"IsCompressed":true,"Success":true,"Value":"vWsAAB+LCAAAAAAAB..etc.."}
... où la valeur est la chaîne compressée d'un objet complexe représenté en JSON. Cela a été très facile à implémenter sur le serveur, mais pour la vie de moi je n'arrive pas à comprendre comment décompresser un NSString gzippé en un NSString non compressé, tous les exemples que je peux trouver pour zlib etc. traitent de fichiers etc.
Quelqu'un peut-il me donner des indices sur la façon de procéder? (Je serais également heureux pour une solution qui utilise deflate car je pourrais changer l'implémentation côté serveur pour utiliser aussi deflate).
Merci!
Steven
Edit 1: Aaah, je vois que ASIHTTPRequest utilise la fonction suivante dans son code source:
//uncompress gzipped data with zlib
+ (NSData *)uncompressZippedData:(NSData*)compressedData;
... et je suis conscient que je peux convertir NSString à NSData, je verrai si cela me mène n'importe où!
Édition 2: Malheureusement, la méthode décrite dans Edit 1 ne m'a conduit nulle part.
Éditer 3: Suivant les conseils ci-dessous concernant le codage/décodage base64, j'ai trouvé le code suivant. Le encodedGzippedString est comme vous pouvez le deviner, une chaîne "Bonjour, mon nom est Steven Elliott" qui est gzippé puis converti en une chaîne base64. Malheureusement, le résultat qui imprime en utilisant NSLog est simplement vide.
NSString *encodedGzippedString = @"GgAAAB+LCAAAAAAABADtvQdgHEmWJSYvbcp7f0r1StfgdKEIgGATJNiQQBDswYjN5pLsHWlHIymrKoHKZVZlXWYWQMztnbz33nvvvffee++997o7nU4n99//P1xmZAFs9s5K2smeIYCqyB8/fnwfPyK+uE6X2SJPiyZ93eaX+TI9Lcuiatvx/wOwYc0HGgAAAA==";
NSData *decodedGzippedData = [NSData dataFromBase64String:encodedGzippedString];
NSData* unGzippedJsonData = [ASIHTTPRequest uncompressZippedData:decodedGzippedData];
NSString* unGzippedJsonString = [[NSString alloc] initWithData:unGzippedJsonData encoding:NSASCIIStringEncoding];
NSLog(@"Result: %@", unGzippedJsonString);
Salut, Pouvez-vous fournir un lien exact avec le framework? –
http://www.chilkatsoft.com/downloads_ios.asp – dirkoneill
comment utiliser chilkat framework? –