En iOS8 y anteriores puedo usar:
NSString *str = ...; // some URL
NSString *result = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
en iOS9 stringByAddingPercentEscapesUsingEncodingha sido reemplazado por stringByAddingPercentEncodingWithAllowedCharacters:
NSString *str = ...; // some URL
NSCharacterSet *set = ???; // where to find set for NSUTF8StringEncoding?
NSString *result = [str stringByAddingPercentEncodingWithAllowedCharacters:set];
y mi pregunta es: ¿dónde encontrar necesario NSCharacterSet( NSUTF8StringEncoding) para el reemplazo adecuado de stringByAddingPercentEscapesUsingEncoding?
fuente

NSURLComponents, que puede manejar la codificación porcentual por usted.NSURLComponents(con cada componente codificado en porcentaje con el correspondienteNSCharacterSet) es el camino correcto a seguir.Para Objective-C:
¿Dónde encontrar el conjunto para NSUTF8StringEncoding?
Hay juegos de caracteres predefinidos para los seis componentes y subcomponentes de URL que permiten la codificación porcentual. Estos juegos de caracteres se pasan a
-stringByAddingPercentEncodingWithAllowedCharacters:.El mensaje de desaprobación dice (el énfasis es mío):
Por lo tanto, solo necesita proporcionar un
NSCharacterSetargumento adecuado . Afortunadamente, para las URL hay un método de clase muy útil llamadoURLHostAllowedCharacterSetque puede usar así:Sin embargo, tenga en cuenta que:
fuente
URLHostAllowedCharacterSetse NO TRABAJO PARA MÍ. Yo usoURLFragmentAllowedCharacterSeten su lugar.C OBJETIVO
SWIFT - 4
Los siguientes son conjuntos de caracteres útiles (invertidos):
fuente
+. Por lo tanto, los signos más en la cadena se estropearán si se pasan en los parámetros de consulta, se tratarán como espacio `` en el lado del servidor.C objetivo
este código funciona para mí:
fuente
Swift 2.2:fuente
Para Swift 3.0
Puede utilizar
urlHostAllowedcharacterSet.fuente
Significa que no se supone que debe codificar el
https://xpto.example.com/path/subpathde la URL, sino solo lo que va después del?.Supuestamente, porque hay casos de uso para hacerlo en casos como:
¿Dónde
xxxxxestá una URL totalmente codificada?fuente
Añadiendo a la respuesta aceptada. Teniendo en cuenta esta nota
la URL completa no debe estar codificada:
fuente