web-dev-qa-db-fra.com

URL Encodage d'une chaîne

je reçois un objet de données JSON, puis j'en extrait une chaîne 

NSDictionary *jsonDictionary = [NSJSONSerialization JSONObjectWithData:data
                                                               options:0
                                                                 error:nil];
NSString *country=jsonDictionary[@"address"][@"country"];

alors j'essaie de rendre la chaîne appropriée pour être utilisée dans une URL 

NSString *newCountryString = [country stringByReplacingOccurrencesOfString:@" "  
   withString:@"%%20"];

mais ça ne fonctionne pas 

si je codais en dur newCountryString cela fonctionnerait, pourquoi est-ce?

15
B.I.A

Utilisez ceci - 

NSString *newCountryString = [country stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

Ce code renverra 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.

pour plus de détails: https://developer.Apple.com/documentation/foundation/nsstring/1415058-stringbyaddingpercentescapesusin

Edit - StringByAddingPercentEscapesUsingEncoding est obsolète dans iOS 9. Utilisez plutôt la suite de ce qui suit

[country stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]

Swift 3 -

country.addingPercentEncoding( withAllowedCharacters: .urlHostAllowed)

pour plus de détails: https://developer.Apple.com/documentation/foundation/nsstring/1411946-stringbyaddingpercentencodinging?language=objc

34
Akshay Nalawade

Comme variante, vous pouvez utiliser la méthode ci-dessous:

- (NSString *)URLEncodeStringFromString:(NSString *)string
{
 static CFStringRef charset = CFSTR("!@#$%&*()+'\";:=,/?[] ");
 CFStringRef str = (__bridge CFStringRef)string;
 CFStringEncoding encoding = kCFStringEncodingUTF8;
 return (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, str, NULL, charset, encoding));
}
14
Ruslan Soldatenko
0
Volker