我正在使用 ASIHTTPRequest 以这种方式发送表单:
ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:url] autorelease];
[request setPostValue:foo forKey:@"post_var"];
如何设置 nsstring foo 的编码?
接收表单数据的网络需要 ISOLatin1 中的值
我正在使用 ASIHTTPRequest 以这种方式发送表单:
ASIFormDataRequest *request = [[[ASIFormDataRequest alloc] initWithURL:url] autorelease];
[request setPostValue:foo forKey:@"post_var"];
如何设置 nsstring foo 的编码?
接收表单数据的网络需要 ISOLatin1 中的值
ASIFormDataRequests 允许您设置发送到服务器的内容的编码,如下所示:
[request setStringEncoding:NSISOLatin1StringEncoding].
默认值为 NSUTF8StringEncoding。
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
类作为 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"];
}
也许将 an 转换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"];