URL Кодирование строки

Я получаю объект данных json, а затем извлекаю из него строку

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

то я пытаюсь сделать строку подходящей для использования в URL

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

но он не работает

Если я жестко закодировал newCountryString, это сработает, почему?

Ответ 1

Используйте это -

NSString *newCountryString = [country stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

Этот код вернет представление получателя с использованием заданной кодировки для определения процентных экранов, необходимых для преобразования получателя в юридическую строку URL.

для более подробной информации: https://developer.apple.com/documentation/foundation/nsstring/1415058-stringbyaddingpercentescapesusin

Изменить - stringByAddingPercentEscapesUsingEncoding устарел в iOS 9. Вместо этого используйте

[country stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]]

Swift 3 -

country.addingPercentEncoding( withAllowedCharacters: .urlHostAllowed)

для более подробной информации: https://developer.apple.com/documentation/foundation/nsstring/1411946-stringbyaddingpercentencodingwit?language=objc

Ответ 2

В качестве варианта вы можете использовать метод ниже:

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