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));
}
Ответ 3
Метод NSSString stringByAddingPercentEscapesUsingEncoding должен помочь вам. Также см. Как подготовить NSURL от международных символов NSString?
Ответ 4
Я думаю, вы должны удалить один%, как показано ниже
NSString *newCountryString = [country stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
для более
NSMutableString stringByReplacingOccurrencesOfString Warning