【问题标题】:NSData & NSURL - url with space having problemNSData & NSURL - 带有空格的 url 有问题
【发布时间】:2010-11-29 07:00:48
【问题描述】:

我的应用程序中有以下代码。

NSData *data=[NSData dataWithContentsOfURL:[NSURL URLWithString:pathOfThumbNail]];

pathOfThumbNail 有以下路径


http://70.84.58.40/projects/igolf/TipThumb/GOLF58B.jpg


当我在 safari 浏览器中打开上述路径时 - 路径会自动更改并成功显示图像。

http://70.84.58.40/projects/igolf/TipThumb/GOLF%2058B.jpg


但在 iPhone 中,由于路径中的空间,图像没有加载到 nsdata 中。

【问题讨论】:

  • 绝妙的问题,在遇到类似问题时偶然发现了这个问题。

标签: iphone xcode nsdata nsurl


【解决方案1】:

使用:stringByAddingPercentEscapesUsingEncoding:

使用给定的编码返回接收者的表示,以确定将接收者转换为合法 URL 字符串所需的百分比转义。

-(NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding

接收者的表示,使用编码来确定将接收者转换为合法 URL 字符串所需的百分比转义。如果编码不能对特定字符进行编码,则返回 nil

@rule 根据请求添加

NSString* urlText = @"70.84.58.40/projects/igolf/TipThumb/GOLF 58B.jpg";
NSString* urlTextEscaped = [urlText stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString: urlTextEscaped];
NSLog(@"urlText:        '%@'", urlText);
NSLog(@"urlTextEscaped: '%@'", urlTextEscaped);
NSLog(@"url:            '%@'", url);

NSLog 输出:

urlText:'70.84.58.40/projects/igolf/TipThumb/GOLF 58B.jpg' urlTextEscaped: '70.84.58.40/projects/igolf/TipThumb/GOLF%2058B.jpg' 网址:'70.84.58.40/projects/igolf/TipThumb/GOLF%2058B.jpg'

【讨论】:

  • 太棒了!正是我想要的。实际上我知道但由于项目负载而忘记了。感谢您对我的帮助。
  • 你的回答很好,但你应该举个例子:NSString* urlText = @"70.84.58.40/projects/igolf/TipThumb/GOLF58B.jpg"; urlText = [urlText stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *url = [NSURL URLWithString: urlText];
  • 注意:stringByAddingPercentEscapesUsingEncoding 不编码保留字符,如 & 和斜杠 (/)
  • 感谢@Zaph 确实很有帮助。
【解决方案2】:

一种 swift 3.0 方法(stringByAddingPercentEscapesUsingEncoding 和 stringByAddingPercentEncodingWithAllowedCharacters 现在似乎已弃用):

let urlString ="your/url/".addingPercentEncoding( withAllowedCharacters: .urlQueryAllowed)

【讨论】:

    【解决方案3】:

    stringByAddingPercentEscapesUsingEncoding 在 iOS 9.0 中已被弃用,建议您改用stringByAddingPercentEncodingWithAllowedCharacters

    这是 iOS 9.0 的 Objective-C 代码

    NSString* urlText = @"70.84.58.40/projects/igolf/TipThumb/GOLF 58B.jpg";
    NSString* urlTextEscaped = [urlText stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    NSURL *url = [NSURL URLWithString: urlTextEscaped];
    
    NSLog(@"urlText:        '%@'", urlText);
    NSLog(@"urlTextEscaped: '%@'", urlTextEscaped);
    NSLog(@"url:            '%@'", url);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      • 2011-07-16
      相关资源
      最近更新 更多