1

当我尝试解析像“care&love”这样的特殊字符时,它只显示“care”,“&”之后的部分被截断我怎样才能让它显示完整的字符串?

NSURL *url = [NSURL URLWithString:urlStr];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url  cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];

NSString *postJson = [NSString stringWithFormat:@"&json=%@", jsonRequest];

NSData *requestData = [postJson dataUsingEncoding:NSUTF8StringEncoding];

[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: requestData];
4

2 回答 2

0

您可以使用Cocoa 的内置 JSON 序列化。这将排除不正确的字符串转义(这很可能是您当前代码中的问题)。

样本:

NSError* error = nil;
NSDictionary* jsonDict = @{@"json": @"EL- STR 261: HAUL & SPOT"};
NSData* requestData = [NSJSONSerialization dataWithJSONObject:jsonDict options:kNilOptions error:&error];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"content-type"];
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]]  forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: requestData];
于 2013-08-23T11:40:27.920 回答
0

假设我们谈论的是 jsonRequest 的值,您必须在将该字符串传递给 postJson 之前对该字符串进行 URL 编码,否则 & 被视为参数分隔符。

json=care&love 被接收服务器解释为 json="care" 和 love=""。

编码值的 URL 看起来像 json=love%26care 并且将被服务器解码为 json="love&care"

使用 stringByAddingPercentEscapesUsingEncoding 进行转义,参见:https ://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/instm/NSString/ stringByAddingPercentEscapesUsingEncoding

于 2013-08-23T11:44:50.757 回答