2009-09-26 41 views
1

我使用ASIHTTPRequest發送形式是這樣的:ASIHTTPRequest:在編碼後的數據

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

如何設置NSString的foo的編碼?

該網站接收表單數據預計ISOLatin1

回答

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]; 

編輯值:我不知道爲什麼上面是行不通的。我想我應該嘗試一下。但看源ASIHTTPRequest的-setPostValue:forKey:方法看起來像它需要的任何NSObject子類的崗位價值:

- (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"]; 
} 

也許轉換的NSString到C字符串,並使用其NSData表示作爲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

重點是我已經有了一個UTF8編碼的NSString。以下示例: c_Foo = [foo UTF8String]; ...... 這不起作用。我沒有得到ISOLatin1編碼的字符串:-( – Jorge 2009-09-26 22:50:43

+0

這樣做,我得到這樣的值:<6275656e f3212121 2121>在窗體接收器。 – Jorge 2009-09-27 08:00:20

3

ASIFormDataRequests允許您設置發送到服務器這樣的內容的編碼:

[request setStringEncoding:NSISOLatin1StringEncoding]. 

默認是NSUTF8StringEncoding。