Для 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
, яке може обробляти відсоткове кодування для вас.