我正在尝试向登录网络服务发送信息,但某些字符给我带来了麻烦。
例如,如果密码类似于h+4hfP
,则网络服务会拒绝该密码,因为加号(“+”)未正确编码为%2B
。
Web服务使用UTF-8编码,因此我一直使用此NSString方法构建NSData对象,- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding;
选择NSUTF8StringEncoding
作为编码。
但这似乎还不够。
问题还可能在于我如何构建NSMutableURLRequest
:
NSData *postData = [@"h+4hfP" dataUsingEncoding:NSUTF8StringEncoding];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:contentLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:postData];
如何确保编码正确完成?
答案 0 :(得分:2)
使用
[theRequest setValue:@"application/json; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
答案 1 :(得分:0)
您可以在将字符串表示为NSData之前对该字符串进行百分比编码:
NSString *password = [@"h+4hfP" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet alphanumericCharacterSet]];
NSData *postData = [password dataUsingEncoding:NSUTF8StringEncoding];
...
答案 2 :(得分:0)
这可以是一个解决方案: 我正面临这个问题。几个小时后搜索,我发现了这个: http://madebymany.com/blog/url-encoding-an-nsstring-on-ios
解决方案: 第1名:您必须创建包含内容的方法或类:
-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding withString:(NSString *) str{
return (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)str,
NULL,
(CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
CFStringConvertNSStringEncodingToEncoding(encoding)));
}
第二名:使用:
NSString *stringToSend = [self urlEncodeUsingEncoding:NSUTF8StringEncoding withString:stringToBeVerifyed];
然后
NSData *postData = [stringToSend dataUsingEncoding:NSUTF8StringEncoding];
[...]