我正在尝试将我的NSDictionary转换为json字符串,然后通过HTTPBody (POST请求)将数据发送到我的web api。我将我的字典转换为json,如下所示:
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dictionary options:0 error:&error];我发现上面的方法并没有对我的数据进行编码(至少像“&”这样的特殊字符没有被处理)。所以在服务器端收到的数据是乱七八糟的,我无法正确地读取它。
有关正在发生的情况的更多详细信息,请假设以下字典:
"salutation":"Mrs."
"companyName":"T & F LLP"
"firstName":"Tania"
"country":"Canada"此字典使用上面的方法转换为NSData,稍后使用如下所示
[request setHTTPBody:nsDataFromJson];我在服务器端收到了什么?我明白了
{"contact":"{\"firstName\":\"Tania\",\"salutation\":\"Mrs.\",\"company\":\"Aird 我只能获得特殊字符&的数据,并且我只能假设发生了这种情况,因为我提到的第一种方法不是像&这样编码特殊字符
因此,我解决了这个问题(暂时):将字典转换为json字符串,然后用%26替换每个&,然后从这个新字符串(带有处理的特殊字符)创建NSData。然后我把整个身体放在我的服务器上。
那么,你知道如何正确处理这件事吗?
顺便说一下,如果我也使用SBJSON,同样的问题也会发生。
发布于 2015-02-10 05:27:35
已经3个月了,所以我猜问题现在一定已经解决了。
接收到的JSON数据被破坏的原因是解析器将&(&)解释为URL地址的一部分。借用this link中的一些代码,我将此函数编写为percent encode&以及其他一些可能会被混淆的字符:
+ (NSDictionary*) percentEncodeDictionayValues:(NSDictionary*) dict
{
NSMutableDictionary* edict=[NSMutableDictionary dictionaryWithDictionary:dict];
NSMutableCharacterSet* URLQueryPartAllowedCharacterSet = [[NSCharacterSet URLQueryAllowedCharacterSet] mutableCopy];
[URLQueryPartAllowedCharacterSet removeCharactersInString:@"?&=@+/'"];
for(NSString* key in [dict allKeys])
{
if([dict[key] isKindOfClass:[NSString class]])
edict[key] = [dict[key] stringByAddingPercentEncodingWithAllowedCharacters:URLQueryPartAllowedCharacterSet];
}
return edict;
}因此,您可以在输入NSJSONSerialization之前使用此函数对NSDictionary对象进行预处理,接收到的数据将保留&和其他字符。
https://stackoverflow.com/questions/26851633
复制相似问题