Для Objective-C :
NSString *str = ...; // some URL
NSCharacterSet *set = [NSCharacterSet URLHostAllowedCharacterSet];
NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:set];
где найти набор для NSUTF8StringEncoding?
Для шести компонентов и подкомпонентов URL-адреса существуют предопределенные наборы символов, которые допускают процентное кодирование. Эти наборы символов передаются в -stringByAddingPercentEncodingWithAllowedCharacters:
.
// Predefined character sets for the six URL components and subcomponents which allow percent encoding. These character sets are passed to -stringByAddingPercentEncodingWithAllowedCharacters:.
@interface NSCharacterSet (NSURLUtilities)
+ (NSCharacterSet *)URLUserAllowedCharacterSet;
+ (NSCharacterSet *)URLPasswordAllowedCharacterSet;
+ (NSCharacterSet *)URLHostAllowedCharacterSet;
+ (NSCharacterSet *)URLPathAllowedCharacterSet;
+ (NSCharacterSet *)URLQueryAllowedCharacterSet;
+ (NSCharacterSet *)URLFragmentAllowedCharacterSet;
@end
В сообщении об устаревании говорится (выделено мной):
Вместо этого используйте stringByAddingPercentEncodingWithAllowedCharacters (_ :), который всегда использует рекомендованную кодировку UTF-8 и кодирует определенный компонент или подкомпонент URL, поскольку каждый компонент или подкомпонент URL имеет разные правила для допустимых символов.
Так что вам нужно только предоставить адекватный NSCharacterSet
аргумент. К счастью, для URL-адресов есть очень удобный метод класса, URLHostAllowedCharacterSet
который вы можете использовать следующим образом:
NSCharacterSet *set = [NSCharacterSet URLHostAllowedCharacterSet];
Однако имейте в виду, что:
Этот метод предназначен для процентного кодирования строки компонента или подкомпонента URL, а НЕ всей строки URL.
NSURLComponents
, который может обрабатывать процентное кодирование за вас.