您好我正在尝试将从网页发送的网络请求复制到iOS上的应用程序作为练习。问题是,当网页发送包含文本lang = C ++的POST时,它将文本编码为lang = C%2B%2B此外,发送的数据似乎已损坏,我是否缺少某种编码?我使用带有setBody编码讯息的NSMutableString
数据发送请求:NSUTF8StringEncoding
,请参阅以下代码:
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
...(URL and so on)...
NSString *contentType = [NSString stringWithFormat:@"application/x-www-form-urlencoded"];
[request addValue:contentType forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:[data dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
请参阅wireshark的这些屏幕截图,了解有关应用程序与Web服务发送的请求的不同样式的更多信息,底部图像中突出显示的文本是我要发送的内容。顶部图像显示了应用程序实际发送的内容,就像现在一样。
答案 0 :(得分:1)
我认为您需要使用NSString的stringByAddingPercentEscapesUsingEncoding
方法对URL进行编码,而相反的方法是使用stringByReplacingPercentEscapesUsingEncoding
进行解码
此编码应在字符串序列化为NSData
之前完成
答案 1 :(得分:1)
上述答案对我不起作用,我必须根据this制作一个扩展NSString
界面的类别。并对上面data
字符串的某些部分使用编码。
以下是我使用的类别的方法:
#import "NSString+URLEncoding.h"
@implementation NSString (URLEncoding)
-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding {
return (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)self,
NULL,
(CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
CFStringConvertNSStringEncodingToEncoding(encoding));
}