2009-09-17 6 views
38

J'ai le code suivant dans mon application.NSData & NSURL - url avec un espace ayant un problème

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

pathOfThumbNail a chemin suivant


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


Quand j'ouvre chemin ci-dessus dans le navigateur Safari - chemin est automatiquement & l'image est correctement affichée.

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


Mais dans l'iPhone, en raison de l'espace dans le chemin, l'image est pas chargé dans NSData.

+5

question brillante, trébuché sur ce par hasard en ayant un problème similaire. –

Répondre

96

Utilisation: stringByAddingPercentEscapesUsingEncoding:

Renvoie une représentation du récepteur en utilisant un codage donné pour déterminer le pour cent échappe nécessaire pour convertir le récepteur dans une chaîne d'URL juridique.

-(NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding 

Une représentation du récepteur en utilisant le codage pour déterminer le pour cent échappe nécessaire pour convertir le récepteur dans une chaîne d'URL juridique. Retourne nil si le codage ne peut coder un caractère particulier

Ajouté par demande par @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); 

sortie 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

Super! Exactement comme je le voulais. En fait, je le savais mais oublié en raison de la charge du projet. Des chapeaux pour votre aide à moi. –

+1

Votre réponse est plutôt bonne, mais vous devriez donner un exemple comme: NSString * urlText = @ "http://70.84.58.40/projects/igolf/TipThumb/GOLF 58B.jpg"; urlText = [urlText stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; NSURL * url = [NSURL URLWithString: urlText]; – rule

+0

Note: stringByAddingPercentEscapesUsingEncoding n'encode pas les caractères réservés comme esperluette (&) et barre oblique (/) – Deeper

10

Une approche 3.0 rapide (semble maintenant déconseillés stringByAddingPercentEscapesUsingEncoding et stringByAddingPercentEncodingWithAllowedCharacters):

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

Le code moderne correct. Merci pour ce Niko! – Fattie

0

stringByAddingPercentEscapesUsingEncoding a été obsolète dans iOS 9.0, il est recommandé d'utiliser stringByAddingPercentEncodingWithAllowedCharacters à la place.

est ici le code Objective-C pour> 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); 
Questions connexes