NSURL带有花括号

Owe*_*rce 2 iphone objective-c nsurl ios

NSURL不支持在URL中使用花括号(即{}).我的应用程序需要与需要在URL中使用花括号的服务器通信.我正在考虑使用桥接器以Python或C++编写网络代码,甚至重写NSURL的C代码以使其接受花括号.我的远程服务器不接受百分比转义.

我还有其他好的选择吗?

编辑:解释为什么addPercentEscapesUsingEncoding等在这里不适合我.

bry*_*mac 10

如果你逃避括号,它会对你有用吗?

这段代码:

// escape {} with %7B and %7D
NSURL *url = [NSURL URLWithString:@"http://somesite.com/%7B7B643FB915-845C-4A76-A071-677D62157FE07D%7D.htm"];
NSLog(@"%@", url);

// {} don't work and return null
NSURL *badurl = [NSURL URLWithString:@"http://somesite.com/{7B643FB915-845C-4A76-A071-677D62157FE07D}.htm"];
NSLog(@"%@", badurl);
Run Code Online (Sandbox Code Playgroud)

输出:

2011-11-30 21:25:06.655 Craplet[48922:707] http://somesite.com/%7B7B643FB915-845C-4A76-A071-677D62157FE07D%7D.htm
2011-11-30 21:25:06.665 Craplet[48922:707] (null)
Run Code Online (Sandbox Code Playgroud)

因此,逃避似乎有效

以下是以编程方式转义url的方法:

NSString *escapedUrlString = [unescaped stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding];
Run Code Online (Sandbox Code Playgroud)

编辑:

在下面的评论中,您说您的服务器不接受编码的大括号,还有其他选择.首先,我会尝试修复服务器.如果那是不可能的......我没有用括号等尝试过这个......但是NS网络类下面的层是CFNetworking.

看到这个:

http://developer.apple.com/library/ios/#documentation/Networking/Conceptual/CFNetwork/CFHTTPTasks/CFHTTPTasks.html#//apple_ref/doc/uid/TP30001132-CH5-SW2

从那个文档:

 CFStringRef url = CFSTR("http://www.apple.com");
 CFURLRef myURL = CFURLCreateWithString(kCFAllocatorDefault, url, NULL);
 CFStringRef requestMethod = CFSTR("GET");

 ....
Run Code Online (Sandbox Code Playgroud)

再一次,没有尝试过,我已经不多了.可能会稍后尝试,但如果图层不起作用,您的第一个选项是向下移动堆栈.


Mic*_*ann 8

布莱恩的答案非常好(给他+1!),但另一种解决方案是使用NSString的stringByAddingPercentEscapesUsingEncoding:方法.

像这样:

NSString * originalURLAsString = [NSString stringWithString: @"http://somesite.com/{7B643FB915-845C-4A76-A071-677D62157FE07D}.htm"];
NSString * properlyEncodedString = [originalURLAsString stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
NSURL * url = [NSURL URLWithString: properlyEncodedString];
Run Code Online (Sandbox Code Playgroud)

我希望这些信息可以帮到你!