iphone - 带大括号的 NSURL

标签 iphone objective-c ios nsurl

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。

看这个:

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");

 ....

再一次,没有尝试过,我快用完了。稍后可能会尝试,但如果某个层不起作用,您的第一个选择是向下移动堆栈。

关于iphone - 带大括号的 NSURL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8335796/

相关文章:

ios - 如何检查给定数组中哪些项目已保存在 Core Data 中

ios - 防止 MKMapView 更改选择(干净地)

ios - 检索框架外的 Storyboard 元素

iphone - 需要传递什么值?http ://maps. google.com/maps/geo?q=%@&output=csv

iphone - Xcode 中的共享类操作?

iphone - 在tableView中显示数组中的数据

ios - UIDeviceOrientation 通知

ios - 使用长按手势与 AVFoundation 开始停止录制

ios - 如何将 NSString 值转换为 NSData?

ios - 保存带有动画 gif 的图像