ASIHTTPRequest: кодирование в почтовых данных

Я использую ASIHTTPRequest для отправки формы следующим образом:

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

Как установить кодировку nsstring foo??

Сеть, получающая данные формы, ожидает значение в ISOLatin1.


person Jorge    schedule 26.09.2009    source источник


Ответы (2)


ASIFormDataRequests позволяет вам установить кодировку содержимого, отправляемого на сервер, следующим образом:

[request setStringEncoding:NSISOLatin1StringEncoding].

По умолчанию используется NSUTF8StringEncoding.

person pokeb    schedule 23.03.2011

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: я не уверен, почему это не сработает. Я думаю, я должен попробовать это. Но глядя на источник для 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"];
}

Возможно, преобразуйте 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"];
person Alex Reynolds    schedule 26.09.2009
comment
Дело в том, что у меня уже есть NSString в кодировке UTF8. Следуя вашему примеру: c_Foo = [foo UTF8String]; ...... Это не работает. Я не получаю строки в кодировке ISOLatin1 :-( - person Jorge; 27.09.2009
comment
Делая это, я получаю такие значения: ‹6275656e f3212121 2121› в форме приемника. - person Jorge; 27.09.2009