También tenga en cuenta que puede usar el -stringByAddingPercentEscapesUsingEncodingmétodo de NSString .
Mike Weller
2
Ah sí, ahora recuerdo el stringByAddingPercentEscapesUsingEncodingcomportamiento funky . Solo codifica '&' y '=' o algo ridículo como ese.
Mike Weller
2
De acuerdo con RFC1738, también necesitaría codificar caracteres adicionales. Entonces, aunque esto responde a la pregunta del OP, tiene una utilidad limitada como codificador de URL de propósito general. Por ejemplo, no maneja no alfanuméricos como una diéresis alemana.
Alex Nauda
3
Esto no funciona (para la parte de iOS 7). Esto no convierte y en% 26.
coolcool1994
1
Crea el conjunto de caracteres que necesitas de un NSStringwith characterSetWithCharactersInString, toma el inverso con invertedSety úsalo con stringByAddingPercentEncodingWithAllowedCharacters. Para ver un ejemplo, vea esta respuesta SO .
Si alguien me dijera quién escribió este código, realmente lo agradecería. Básicamente tiene alguna explicación de por qué esta cadena codificada se decodificará exactamente como lo desee.
Modifiqué un poco su solución. Me gusta que el espacio se represente con% 20 en lugar de +. Eso es todo.
@yuchaozh esta es una función que pones dentro de una categoría de NSString. Entonces, self es NSStirng y [self UTF8String] devuelve, asumiendo, su cadena en formato UTF8.
liberar encodedString y url. Este código trata sobre el parámetro de codificación. Para codificar la cadena de paso de dirección completa en lugar de "parámetro".
Zahi
Esto funcionó para mí ... codificó incluso el carácter & con el que estaba teniendo problemas.
Виктор Иванов
3
Esto puede funcionar en Objective C ARC. Utilice CFBridgingRelease para emitir un objeto de estilo Core Foundation como un objeto Objective-C y transfiera la propiedad del objeto a ARC . Vea la función CFBridgingRelease aquí.
Esto es lo que uso. Tenga en cuenta que debe usar la @autoreleasepoolfunción o el programa podría bloquearse o bloquear el IDE. Tuve que reiniciar mi IDE tres veces hasta que me di cuenta de la solución. Parece que este código es compatible con ARC.
Esta pregunta se ha hecho muchas veces y se han dado muchas respuestas, pero lamentablemente todas las seleccionadas (y algunas otras sugeridas) están equivocadas.
Aquí está la cadena de prueba que usé: This is my 123+ test & test2. Got it?!
Google implementa esto en su Google Toolbox para Mac . Así que es un buen lugar para conocer cómo lo están haciendo. Otra opción es incluir Toolbox y usar su implementación.
Verifique la implementación aquí . (Lo que se reduce exactamente a lo que la gente ha estado publicando aquí).
ùÕ9y^VêÏÊEØ®.ú/V÷ÅÖêú2Èh~
: ¡ninguna de las soluciones a continuación parece abordar esto!Respuestas:
Para escapar de los personajes que quieres es un poco más de trabajo.
Código de ejemplo
Salida NSLog:
Los siguientes son útiles conjuntos de caracteres de codificación de URL:
Crear un conjunto de caracteres que combine todo lo anterior:
Creando una Base64
En el caso del juego de caracteres Base64:
Nota:
stringByAddingPercentEncodingWithAllowedCharacters
también codificará caracteres UTF-8 que necesitan codificación.Usando Core Foundation sin ARC:
Nota:
-stringByAddingPercentEscapesUsingEncoding
no producirá la codificación correcta, en este caso no codificará nada que devuelva la misma cadena.stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding
codifica 14 caracteres:testString:
encodedString:
Nota: considere si este conjunto de caracteres satisface sus necesidades, si no, cámbielos según sea necesario.
RFC 3986 caracteres que requieren codificación (% agregado ya que es el prefijo de codificación):
Algunos "caracteres no reservados" están codificados adicionalmente:
fuente
-stringByAddingPercentEscapesUsingEncoding
método de NSString .stringByAddingPercentEscapesUsingEncoding
comportamiento funky . Solo codifica '&' y '=' o algo ridículo como ese.NSString
withcharacterSetWithCharactersInString
, toma el inverso coninvertedSet
y úsalo constringByAddingPercentEncodingWithAllowedCharacters
. Para ver un ejemplo, vea esta respuesta SO .Se llama codificación URL . Más aquí .
fuente
CFURLCreateStringByAddingPercentEscapes()
es obsoleto. Usar en su[NSString stringByAddingPercentEncodingWithAllowedCharacters:]
lugar.Esta no es mi solución. Alguien más escribió en stackoverflow pero he olvidado cómo.
De alguna manera, esta solución funciona "bien". Maneja caracteres diacríticos, chinos y casi cualquier otra cosa.
Si alguien me dijera quién escribió este código, realmente lo agradecería. Básicamente tiene alguna explicación de por qué esta cadena codificada se decodificará exactamente como lo desee.
Modifiqué un poco su solución. Me gusta que el espacio se represente con% 20 en lugar de +. Eso es todo.
fuente
fuente
Esto puede funcionar en Objective C ARC. Utilice CFBridgingRelease para emitir un objeto de estilo Core Foundation como un objeto Objective-C y transfiera la propiedad del objeto a ARC . Vea la función CFBridgingRelease aquí.
fuente
Swift iOS:
Solo para información: he usado esto:
fuente
Deberá liberar o liberar automáticamente
str
usted mismo.fuente
Esto es lo que uso. Tenga en cuenta que debe usar la
@autoreleasepool
función o el programa podría bloquearse o bloquear el IDE. Tuve que reiniciar mi IDE tres veces hasta que me di cuenta de la solución. Parece que este código es compatible con ARC.Esta pregunta se ha hecho muchas veces y se han dado muchas respuestas, pero lamentablemente todas las seleccionadas (y algunas otras sugeridas) están equivocadas.
Aquí está la cadena de prueba que usé:
This is my 123+ test & test2. Got it?!
Estos son mis métodos de clase Objective C ++:
fuente
Google implementa esto en su Google Toolbox para Mac . Así que es un buen lugar para conocer cómo lo están haciendo. Otra opción es incluir Toolbox y usar su implementación.
Verifique la implementación aquí . (Lo que se reduce exactamente a lo que la gente ha estado publicando aquí).
fuente
Así es como estoy haciendo esto rápidamente.
fuente
// usa el método de instancia NSString de esta manera:
recuerde, solo debe codificar o decodificar el valor de su parámetro, no toda la url que solicita.
fuente
fuente