如何编码一个string的特殊字符,将被张贴到一个URL? Objective-C的

目前我有一个string,我想发布到一个URL。

除非遇到像“&”和“?”这样的特殊字符,否则它工作得很好。 它不会发布任何后来的数据。 例如,如果我有一个string“我什么东西?”,它只会发布“我是某事”。 至于“?”,发布后会转换为“2”。

reason = 'What see see! Are you sure'2'' 

我很确定它必须与编码有关,因为我可以看到“我是什么东西? 就像在我设置编码之前一样:

 NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding]; 

我也尝试了下面的编码,但没有成功:

 NSData *postData = [post dataUsingEncoding:NSUTF8StringEncoding]; NSData *postData = [post dataUsingEncoding:NSNonLossyASCIIStringEncoding]; NSData *postData = [post dataUsingEncoding:NSISOLatin1StringEncoding]; 

以下是postData之后的代码:

 NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding]; //NSLog(@"PostData: %@", postData); NSString *check = [[NSString alloc] initWithData:postData encoding:NSASCIIStringEncoding]; NSLog(@"check string = %@", check); NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]]; NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; [request setURL:[NSURL URLWithString:strURLQueryString]]; [request setHTTPMethod:@"POST"]; [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; [request setHTTPBody:postData]; NSURLResponse *response; NSError *err=nil; NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err]; NSString *strResponse = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; NSLog(@"Response: %@", strResponse); if(err!=nil) { NSLog(@"Error: %@", [err description]); } 

请协助。 感谢您的帮助。

在那里可能有更好的答案,但是这个类的扩展已经为我工作了一段时间。 我通过查看几个post拼凑了%escapes …

 // NSString+URLEncoding.h @interface NSString (NSString_URLEncoding) - (NSString *)urlEncodeUsingEncoding:(CFStringEncoding)encoding; - (NSString *)urlEncode; @end // NSString+URLEncoding.m @implementation NSString (NSString_URLEncoding) - (NSString *)urlEncodeUsingEncoding:(CFStringEncoding)encoding { return CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (__bridge CFStringRef)self, NULL, CFSTR("!*'();:@&=+$,/?%#[]"), encoding)); } - (NSString *)urlEncode { return [self urlEncodeUsingEncoding:kCFStringEncodingUTF8]; } 

然后在其他类发送一个string…

 // SomeOtherClass.m #import "NSString+URLEncoding.h" NSString *encodedString = [@"This & this? are 'challenging' to !% encode" urlEncode];