2009-09-17 27 views
38

Tengo el siguiente código en mi aplicación.NSData & NSURL - url con espacio con problema

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

pathOfThumbNail ha ruta siguiente


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


Al abrir ruta anterior en el navegador Safari - ruta se cambia automáticamente la imagen & se visualiza correctamente.

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


Pero en iPhone, por falta de espacio en el camino, la imagen no se carga en NSData.

+5

pregunta brillante, tropezado con esto por casualidad cuando se tiene un problema similar. –

Respuesta

96

Uso: stringByAddingPercentEscapesUsingEncoding:

Devuelve una representación del receptor utilizando una codificación dada para determinar el porcentaje escapa necesario convertir el receptor en una cadena URL legal.

-(NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding 

Representación del receptor mediante codificación para determinar el porcentaje de escape necesario para convertir el receptor en una cadena URL legal. Devuelve nil si la codificación no puede codificar un carácter particular

añadido por petición de @rule salida

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' 
+2

¡Genial! Exactamente como yo quería. En realidad, lo sabía, pero lo olvidé debido a la carga del proyecto. Los sombreros de tu tipo me ayudan. –

+1

Su respuesta es bastante buena, pero debería dar un ejemplo como: NSString * urlText = @ "http://70.84.58.40/projects/igolf/TipThumb/GOLF 58B.jpg"; urlText = [urlText stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; NSURL * url = [NSURL URLWithString: urlText]; – rule

+0

Nota: stringByAddingPercentEscapesUsingEncoding no codifica los caracteres reservados como ampersand (&) y slash (/) – Deeper

10

Un enfoque rápido 3.0 (stringByAddingPercentEscapesUsingEncoding y stringByAddingPercentEncodingWithAllowedCharacters parece ahora en desuso):

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

El código moderno correcto. Gracias por eso, Niko! – Fattie

0

stringByAddingPercentEscapesUsingEncoding ha quedado obsoleto en iOS 9.0, en su lugar, se recomienda usar stringByAddingPercentEncodingWithAllowedCharacters.

Aquí está el código de Objective-C para> 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); 
Cuestiones relacionadas