2011-01-14 12 views
25

Estoy tratando con una cadena urlencoded en objetivo-c. ¿Existe una función de base que realmente revierte el urlENCODING?urldecode en objetivo-c

La cadena recibida es como: K% FChlschrank pero debe ser después de la decodificación Kühlschrank

Respuesta

60

Hice una categoría rápida para ayudar a resolver este :)

@interface NSString (stringByDecodingURLFormat) 
- (NSString *)stringByDecodingURLFormat; 
@end 

@implementation NSString 
- (NSString *)stringByDecodingURLFormat 
{ 
    NSString *result = [(NSString *)self stringByReplacingOccurrencesOfString:@"+" withString:@" "]; 
    result = [result stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
    return result; 
} 
@end 

Una vez definido, esto rápidamente puede manejar una cadena codificada:

NSString *decodedString = [myString stringByDecodingURLFormat]; 

Un montón de otras maneras de implementar.

+0

bastante útil-thx – Chris

+2

Creo que el resultado NSString, en realidad debería ser el resultado NSString *. – christophercotton

+0

Como dices ..... – BadPirate

15

Creo que esto es lo que busca:

- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding 

Valor de retorno:

Una nueva cadena hecho reemplazando en el receptor, todos los porcentajes se escapan con los caracteres coincidentes determinados por la codificación dada. Devuelve nil si la transformación no es posible, por ejemplo, el porcentaje de escape da una secuencia de bytes no legal en la codificación.

[source: Apple NSString Class Reference] 
+0

qué codificación debería pasar como parámetro? intenté NSUTF8StringEncoding ya sea – Chris

+0

um, no sé qué codificación es en realidad, pero hay una larga lista disponible en la documentación. –

+1

bien, estaba recibiendo respuesta de una solicitud NSURL. La siguiente línea corrigió la emisión: NSString * deviceName = [[[NSString alloc] initWithData: returnData encoding: NSUTF8StringEncoding] stringByReplacingPercentEscapesUsingEncoding: NSISOLatin1StringEncoding]; – Chris

3

De acuerdo con W3Schools, las URL solo pueden enviarse a través de Internet utilizando el juego de caracteres ASCII. Para mí, este trozo de código funcionó:

NSString *original = @"K%FChlschrank"; 

NSString *result2 = [original stringByReplacingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 
6
- (NSString *)URLDecode:(NSString *)stringToDecode 
{ 
    NSString *result = [stringToDecode stringByReplacingOccurrencesOfString:@"+" withString:@" "]; 
    result = [result stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
    return result; 
} 

eso es todo

+0

funcionó para mí también, gracias! – estoy

-1

para la solución parmanent en IOS 9, utilice el barbecho código

NSURL* link = [NSURL URLWithString:[url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]]; 
+0

Su respuesta es para codificar la cadena, pero necesitamos una para decodificar la cadena. – Demona

Cuestiones relacionadas