如何从包含空格的字符串创建NSURL?

时间:2012-07-18 19:42:18

标签: ios

此代码的结果是url为null

NSString* home = [NSHomeDirectory() stringByAppendingPathComponent:@"/Library/Application Support/"];
NSURL *url = [NSURL URLWithString:home];

这是这样的:

NSString* home = [NSHomeDirectory() stringByAppendingPathComponent:@"/Library/Application Support/"];
home = [home stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:home];

4 个答案:

答案 0 :(得分:10)

您的问题不是从包含空格的字符串创建网址,而是从包含空格的路径字符串创建。

对于路径,您不应使用URLWithString。 Mac OS X和iOS包括便捷功能,用于为文件路径构建NSURL,以便自动处理此问题。请改用其中一个。

Apple的[NSURL fileURLWithPath: path]文档说:

  

此方法假定 path 是一个以斜杠结尾的目录。如果 path 没有以斜杠结尾,则该方法会检查文件系统以确定 path 是文件还是目录。如果文件系统中存在 path 并且是目录,则该方法会附加一个尾部斜杠。如果文件系统中不存在 path ,则该方法假定它表示文件而不附加尾部斜杠。

     

作为替代方案,请考虑使用fileURLWithPath:isDirectory:,它允许您显式指定返回的NSURL对象是否表示文件或目录。

此外,您应该使用NSSearchPathForDirectoriesInDomains来查找应用程序支持目录。

把这些放在一起,你最终会得到这样的结果:

NSArray *paths = NSSearchPathForDirectoriesInDomains(
                     NSApplicationSupportDirectory, NSUserDomainMask, YES);
NSString *applicationSupportDirectory = [paths objectAtIndex:0];
NSURL *url = [NSURL fileURLWithPath: applicationSupportDirectory isDirectory: YES];

来源:

答案 1 :(得分:4)

您实际上需要添加百分比转义符,而不是删除它们:

NSString* home = [NSHomeDirectory() stringByAppendingPathComponent:@"/Library/Application Support/"];
    NSURL *url = [NSURL URLWithString:[home stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    NSLog(@"%@", url);

打印:

2012-07-18 13:44:54.738 Test[1456:907] /var/mobile/Applications/FF6E6881-1D1B-4B74-88DF-06A2B62CCFE6/Library/Application%20Support

答案 2 :(得分:4)

Swift 2.0版本:

let encodedPath = path?.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!

答案 3 :(得分:1)

首先,如果您实际上正在尝试获取应用程序的应用程序支持目录,请使用适当的方法处理作业(在本例中为NSFileManager)并直接处理URL:

NSURL* appSupport = [[NSFileManager defaultManager] URLForDirectory: NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:NULL];

如果你真的想构建一个路径,那么使用适当的初始化程序,在这种情况下,告诉URL它是一个文件路径URL,这样它就会自然地处理空格,你可能会建立一个URL路径(这个示例更像是上面的代码):

NSString* home = [NSHomeDirectory() stringByAppendingPathComponent:@"/Library/Application Support/"];
// Here, use the appropriate initializer for NSURL
NSURL *url = [NSURL fileURLWithPath:home];

现在,URL将被正确地进行百分比编码,您将不会遇到任何问题(返回时不会为nil。)