在我的应用程序中,我需要向url发送一些参数,当我尝试使用stringByAddingPercentEscapesUsingEncoding时,它无法正确转换。如果我没有使用这种编码,我将从nsurl获取null(Exception)。这是我的代码。
http://www.mycompurl.co?message=xyz&id=____我在这里发送id 1或2或任何数字。 当我通过使用stringByAddingPercentEscapesUsingEncoding将此字符串转换为url时,我得到了 “http://www.mycompurl.co?message=xyz&id= **%E2%80%8B ** 1”(当我发送1作为参数时)。然后我从Url获得了0个数据。
str = [NSString stringWithFormat:@"%@?message=xyz&id=%@",Application_URL,bootupdateNew];
str = [str stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
url=[NSURL URLWithString:str];
NSError* error = nil;
data1 = [NSData dataWithContentsOfURL:url options:NSDataReadingUncached error:&error];
提前谢谢
答案 0 :(得分:0)
网址由多个组件组成。
每个组件都有其拥有规则,该组件的源字符串必须如何编码,以便该组件在URL字符串中有效。
如果字符串包含 more 而不是一个组件,那么应用stringByAddingPercentEscapesUsingEncoding:
永远不会生成正确的URL(如果我们假设,我们有一个无界集合源字符串 - 以便编码的字符串实际上与源字符串不同。)
它甚至不会使用表示任何单个组件的字符串始终。
换句话说,对于什么值,stringByAddingPercentEscapesUsingEncoding:
不应该用来尝试从几个组件中创建一个URL。即使正确编码的 URL查询组件也至少容易出错,而且在使用stringByAddingPercentEscapesUsingEncoding:
时,它仍然存在问题。 (你可以在SO上找到正确的实现 - 而且我自己发布了一个)。
但是现在,忘了它:
Apple花了一段时间来认识到这种失败,并发明了NSURLComponents
。它自iOS 7开始可用。看看吧! ;)