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?
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
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));
}
La méthode NSSString string devrait vous aider. Voir aussi Comment préparer un NSURL à partir d’un NSString contenant des caractères internationaux?