一般情况下
NSDictionary *dict =@{ @"name" : @"zhangsan",
@"password" : @"123"
}
这是我们通过get请求传入参数字典后自动拼接而成的url
http://www.it315.org/counter.jsp?name=zhangsan&password=123
参数标准格式 ?key=value&key2=value2
可是今天遇到了一个小问题~
类似这种格式的参数通过参数传入后会报错并请求不到数据
NSDictionary *dict = @{
@"jsonStr":@{
@"tel":@"18888888888",
@"password":@"123"}
};
http://114.55.85.161:8080/wdnz/bus/api/login?jsonStr={"tel":"188888888888","password":"123"}
于是查找原因 在这里⬇️
因为网络标准RFC 1738 做了硬性规定:
“…Only alphanumerics [0-9a-zA-Z], the special characters “$-_.+!*’(),” [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL.”
“只有字母和数字[0-9a-zA-Z]、一些特殊符号“$-_.+!*’(),”[不包括双引号]、以及某些保留字,才可以不经过编码直接用于 URL。”
这意味着,如果URL中有汉字,或者上边特殊符号除外的字符,就必须编码后使用
解决方案也很简单~
NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:0 error:nil];
NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
NSDictionary *parameters = [NSDictionary dictionary];
parameters = @{ @"jsonStr" : str };
将parameters 作为get请求参数传入就OK了~
或者直接用MJExtension
框架的方法:[dict mj_JSONString]
花了半个多小时研究没想到这么简单 …看来还差的远远远远呢
奥 对了
附赠解决输出编码问题方案(分类导入项目即可)
http://download.youkuaiyun.com/detail/luobosiji/9557313
不客气 ~ 啦啦啦啦啦啦