2009-09-26 7 views
1

J'utilise ASIHTTPRequest d'envoyer un formulaire de cette façon:ASIHTTPRequest: l'encodage des données post

ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:url] autorelease]; 
[request setPostValue:foo forKey:@"post_var"]; 

Comment puis-je régler le codage de la NSString foo ??

Le Web recevant les données de formulaire attend la valeur ISOLatin1

Répondre

0
const char *_cFoo = "bar"; 
NSString *_foo = [[NSString alloc] initWithCString:_cFoo encoding:NSISOLatin1StringEncoding]; 
ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:url] autorelease]; 
[request setPostValue:_foo forKey:@"post_var"]; 
// ... 
[request trigger]; 
[_foo release]; 

EDIT: Je ne sais pas pourquoi ne fonctionnerait pas ci-dessus. Je suppose que je devrais essayer. Mais en regardant la source ASIHTTPRequest, la méthode -setPostValue:forKey: ressemble à cela prend une sous-classe NSObject pour une valeur POST:

- (void)setPostValue:(id <NSObject>)value forKey:(NSString *)key 
{ 
    if (![self postData]) { 
     [self setPostData:[NSMutableDictionary dictionary]]; 
    } 
    [[self postData] setValue:[value description] forKey:key]; 
    [self setRequestMethod:@"POST"]; 
} 

convertir Peut-être un NSString à une chaîne C et utiliser sa représentation NSData comme la valeur de la variable POST:

NSString *_foo = @"bar"; 
const char *_cFoo = [_foo cStringUsingEncoding:NSISOLatin1StringEncoding]; 
NSData *_cFooData = [NSData dataWithBytes:_cFoo length:strlen(_cFoo)]; 
[request setPostValue:_cFooData forKey:@"post_var"]; 
+0

Le point est que j'ai déjà un NSString codé UTF8. En suivant votre exemple: c_Foo = [foo UTF8String]; ...... Cela ne fonctionne pas. Je ne reçois pas de chaînes codées ISOLatin1 :-( – Jorge

+0

En faisant cela, j'obtiens des valeurs comme ceci: <6275656e f3212121 2121> dans le formulaire récepteur. – Jorge

3

ASIFormDataRequests permettent de vous définir l'encodage du contenu envoyé au serveur comme ceci:

[request setStringEncoding:NSISOLatin1StringEncoding]. 

La valeur par défaut est NSUTF8StringEncoding.

Questions connexes