Para Objective-C:
NSString *str = ...; // some URL
NSCharacterSet *set = [NSCharacterSet URLHostAllowedCharacterSet];
NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:set];
onde encontrar definido para NSUTF8StringEncoding?
Existem conjuntos de caracteres predefinidos para os seis componentes e subcomponentes de URL que permitem codificação percentual. Esses conjuntos de caracteres são passados para -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
A mensagem de suspensão de uso diz (ênfase minha):
Use stringByAddingPercentEncodingWithAllowedCharacters (_ :) em vez disso, que sempre usa a codificação UTF-8 recomendada e que codifica para um componente ou subcomponente de URL específico, uma vez que cada componente ou subcomponente de URL tem regras diferentes para quais caracteres são válidos.
Portanto, você só precisa fornecer um NSCharacterSet
argumento adequado . Felizmente, para URLs, há um método de classe muito útil chamado URLHostAllowedCharacterSet
que você pode usar assim:
NSCharacterSet *set = [NSCharacterSet URLHostAllowedCharacterSet];
Esteja ciente, porém, que:
Este método destina-se a codificar por cento um componente de URL ou string de subcomponente, NÃO uma string de URL inteira.
NSURLComponents
, que pode lidar com codificação de porcentagem para você.