NSData & NSURL - URL с пробелом, имеющий проблему - PullRequest
38 голосов
/ 18 сентября 2009

В моем приложении указан следующий код.

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

pathOfThumbNail имеет следующий путь


http://70.84.58.40/projects/igolf/TipThumb/GOLF 58B.jpg


Когда я открываю вышеуказанный путь в браузере Safari - путь изменяется автоматически и изображение успешно отображается.

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


Но в iPhone из-за пробела в пути изображение не загружается в nsdata.

Ответы [ 3 ]

98 голосов
/ 18 сентября 2009

Использование: stringByAddingPercentEscapesUsingEncoding:

Возвращает представление получателя с использованием заданной кодировки для определения процента экранирования, необходимого для преобразования получателя в допустимую строку URL.

-(NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding

Представление получателя, использующее кодирование для определения процента экранирования, необходимого для преобразования получателя в допустимую строку URL-адреса. Возвращает ноль, если кодировка не может кодировать определенный символ

Добавлено по запросу @ 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'  
url:            '70.84.58.40/projects/igolf/TipThumb/GOLF%2058B.jpg'  
12 голосов
/ 27 сентября 2016

Подход Swift 3.0 (stringByAddingPercentEscapesUsingEncoding и stringByAddingPercentEncodingWithAllowedCharacters теперь не рекомендуется):

let urlString ="your/url/".addingPercentEncoding( withAllowedCharacters: .urlQueryAllowed)
2 голосов
/ 10 ноября 2017

stringByAddingPercentEscapesUsingEncoding устарела в iOS 9.0, рекомендуется использовать stringByAddingPercentEncodingWithAllowedCharacters вместо.

Вот код Objective-C для> iOS 9.0

NSString* urlText = @"70.84.58.40/projects/igolf/TipThumb/GOLF 58B.jpg";
NSString* urlTextEscaped = [urlText stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL *url = [NSURL URLWithString: urlTextEscaped];
enter code here

NSLog(@"urlText:        '%@'", urlText);
NSLog(@"urlTextEscaped: '%@'", urlTextEscaped);
NSLog(@"url:            '%@'", url);
...