HTTP请求中的奇怪字符

时间:2013-05-31 21:00:20

标签: ios http character-encoding

您好我正在尝试将从网页发送的网络请求复制到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服务发送的请求的不同样式的更多信息,底部图像中突出显示的文本是我要发送的内容。顶部图像显示了应用程序实际发送的内容,就像现在一样。

what i seem to be posting

What should be posted

2 个答案:

答案 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));
}