NSURL 不支持在 URL 中使用大括号(即 {})。我的应用程序需要与需要在 URL 中使用花括号的服务器通信。我正在考虑使用桥在 Python 或 C++ 中编写网络代码,或者甚至重写 NSURL 的 C 代码以使其接受大括号。我的远程服务器不接受百分比转义。
我还有其他好的选择吗?
编辑:解释了为什么 addingPercentEscapesUsingEncoding 之类的在这里对我不起作用。
最佳答案
如果你摆脱牙套,它对你有用吗?
这段代码:
// 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);
输出:
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)
所以,转义似乎可行
以下是如何以编程方式转义 url:
NSString *escapedUrlString = [unescaped stringByAddingPercentEscapesUsingEncoding: NSASCIIStringEncoding];
编辑:
在您下面的评论中,您说您的服务器不接受编码的大括号并且是否有任何其他选择。首先,我会尝试修复服务器。如果那不可能...我还没有用大括号等尝试过...但是 NS 网络类下面的层是 CFNetworking。
看这个:
来自那个文档:
CFStringRef url = CFSTR("http://www.apple.com");
CFURLRef myURL = CFURLCreateWithString(kCFAllocatorDefault, url, NULL);
CFStringRef requestMethod = CFSTR("GET");
....
再一次,没有尝试过,我快用完了。稍后可能会尝试,但如果某个层不起作用,您的第一个选择是向下移动堆栈。
关于iphone - 带大括号的 NSURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8335796/