2011-01-14 8 views
25

Ho a che fare con una stringa urlencoded in ogg-c. Esiste una funzione di base che inverta effettivamente l'urlENCODING?urldecode in ogg-c

La stringa ricevuta è come: K% FChlschrank ma dovrebbe essere dopo la decodifica Kühlschrank

risposta

60

Ho fatto una categoria veloce per aiutare a risolvere questo :)

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

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

Una volta definito, in fretta in grado di gestire una stringa codificata:

NSString *decodedString = [myString stringByDecodingURLFormat]; 

Un sacco di altri modi per implementare.

+0

piuttosto a portata di mano - thx – Chris

+2

Credo che il risultato NSString, in realtà dovrebbe essere risultato NSString *. – christophercotton

+0

Come dici tu ... – BadPirate

15

Credo che questo è quello che stai cercando:

- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding 

Valore di ritorno:

una nuova stringa fatto sostituendo nel ricevitore tutte le percentuali di escape con i caratteri corrispondenti determinati dalla codifica fornita. Restituisce nil se la trasformazione non è possibile, ad esempio, le percentuali di escape danno una sequenza di byte non legale nella codifica.

[source: Apple NSString Class Reference] 
+0

quello che codifica dovrei passare come parametro? provato NSUTF8StringEncoding già – Chris

+0

um, non so quale sia la codifica effettivamente, ma c'è una lunga lista disponibile nella documentazione. –

+1

okay, stavo ricevendo risposta da un NSURLRequest. La riga seguente ha corretto l'issure: NSString * deviceName = [[[NSString alloc] initWithData: returnData encoding: NSUTF8StringEncoding] stringByReplacingPercentEscapesUsingEncoding: NSISOLatin1StringEncoding]; – Chris

3

Secondo W3Schools, gli URL possono essere inviati solo su Internet utilizzando il set di caratteri ASCII. Per me questo pezzo di codice ha funzionato:

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; 
} 

Questo è tutto

+0

ha funzionato anche per me, grazie! – estoy

-1

Per la soluzione parmanent su iOS 9, utilizzare il fermo, il codice

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

La tua risposta è per la codifica della stringa, ma abbiamo bisogno di quella per decodificare la stringa. – Demona

Problemi correlati