NSData & amp; NSURL - url avec espace ayant un problème
Question
J'ai le code suivant dans mon application.
NSData *data=[NSData dataWithContentsOfURL:[NSURL URLWithString:pathOfThumbNail]];
pathOfThumbNail a le chemin suivant
http://70.84.58.40/projects/igolf/TipThumb/GOLF 58B .jpg
Lorsque j'ouvre le chemin ci-dessus dans le navigateur Safari - le chemin est modifié automatiquement & amp; l'image est affichée avec succès.
http://70.84.58.40/projects/igolf/TipThumb/GOLF%%%% aussi 2058B.jpg
Mais sur l'iPhone, en raison de l'espace disponible dans le chemin d'accès, l'image n'est pas chargée dans nsdata.
La solution
Utilisez: stringByAddingPercentEscapesUsingEncoding:
Renvoie une représentation du destinataire utilisant un codage donné pour déterminer le pourcentage d'évasions nécessaires pour convertir le destinataire en chaîne URL légale.
-(NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding
Représentation du destinataire utilisant l'encodage pour déterminer le pourcentage d'évasions nécessaires pour convertir le destinataire en chaîne URL légale. Renvoie la valeur nil si le codage ne peut pas coder un caractère particulier
Ajouté par requête 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'
Autres conseils
Une approche swift 3.0 (stringByAddingPercentEscapesUsingEncoding et stringByAddingPercentEncodingWithAllowedCharacters semble maintenant obsolète):
let urlString ="your/url/".addingPercentEncoding( withAllowedCharacters: .urlQueryAllowed)
stringByAddingPercentEscapesUsingEncoding
est obsolète dans iOS 9.0, il est recommandé d'utiliser stringByAddingPercentEncodingWithAllowedCharacters
à la place.
Voici 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);