以前,我在向Web服务发布特殊字符时遇到问题。但现在,我可以发布除“?”之外的所有特殊字符我不明白为什么。
的NSString + URLEndoding.h
@interface NSString (NSString_URLEncoding) //originally NSOBject
- (NSString *)urlEncodeUsingEncoding:(CFStringEncoding)encoding;
- (NSString *)urlEncode;
@end
的NSString + URLEndoding.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];
}
@end
以下是UpdateSomething.m的一部分:
NSString *encodeSomething = [something urlEncode];
NSMutableString *post = [NSMutableString stringWithFormat:@"something=%@", encodeSomething];
//NSLog(@"post: %@", post);
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding];
//NSLog(@"PostData: %@", postData);
NSString *check = [[NSString alloc] initWithData:postData encoding:NSASCIIStringEncoding]; //UTF8 also works.
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];
}
支票的输出是:
check string = something%20%3F
我知道“%3F”=“?”。但是我不明白为什么每当我输入问号时我都会收到错误。
Response: Input Array does not match ?
非常感谢您的协助。
答案 0 :(得分:0)
在我发布这个问题之后,我曾尝试再次这样做。
以前,我使用过其他人编写的Web服务。我怀疑它与某些自定义转义字符函数有关。
这一次,我编写了自己的网络服务,它运作完美。我甚至不需要使用“NSString_URLEncoding”