2011-01-14 14 views
25

Mam do czynienia ze sznurkiem napiętym łańcuchowo w celu-c. Czy istnieje funkcja podstawiania, która faktycznie odwraca urlENCODING?kod URL w argumencie-c

Ciąg otrzymał jest jak: K% FChlschrank ale powinna być po zdekodowaniu Kühlschrank

Odpowiedz

60

Zrobiłem szybki kategorię, aby pomóc rozwiązać ten problem :)

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

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

Raz zdefiniowane, to szybko może obsłużyć zakodowany ciąg:

NSString *decodedString = [myString stringByDecodingURLFormat]; 

wiele innych sposobów realizacji.

+0

całkiem poręczny – Chris

+2

Wierzę, że wynik NSString, faktycznie powinien być wynikiem NSString *. – christophercotton

+0

Jak mówisz ... – BadPirate

15

Wierzę, że to jest to, czego szukasz:

- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding 

Zwracana wartość:

nowy łańcuch wykonane przez zastąpienie w odbiorniku wszystkich procentów ucieczki z pasującymi znakami określonymi przez dane kodowanie. Zwraca nil, jeśli transformacja nie jest możliwa, na przykład, procentowe wartości escape dają sekwencję bajtów, które nie są legalne w kodowaniu.

[source: Apple NSString Class Reference] 
+0

jakie kodowanie powinien przekazać jako parametr? wypróbowałem NSUTF8StringEncoding już – Chris

+0

um, nie wiem, co to jest kodowanie, ale istnieje długa lista dostępna w dokumentacji. –

+1

OK, otrzymywałem odpowiedź od NSURLRequest. Następująca linia jest poprawiona: isSure: NSString * deviceName = [[[NSString alloc] initWithData: returnData encoding: NSUTF8StringEncoding] stringByReplacingPercentEscapesUsingEncoding: NSISOLatin1StringEncoding]; – Chris

3

Zgodnie z W3Schools adresy URL mogą być wysyłane tylko przez Internet przy użyciu zestawu znaków ASCII. Dla mnie ten kawałek kodu pracował:

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

to wszystko

+0

również mi się udało, dzięki! – estoy

-1

do rozwiązania parmanent na iOS 9, używać odłogowania kod

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

Twoja odpowiedź dotyczy kodowania ciągu, ale potrzebujemy tego, aby rozszyfrować ciąg znaków. – Demona

Powiązane problemy