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
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
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.
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]
jakie kodowanie powinien przekazać jako parametr? wypróbowałem NSUTF8StringEncoding już – Chris
um, nie wiem, co to jest kodowanie, ale istnieje długa lista dostępna w dokumentacji. –
OK, otrzymywałem odpowiedź od NSURLRequest. Następująca linia jest poprawiona: isSure: NSString * deviceName = [[[NSString alloc] initWithData: returnData encoding: NSUTF8StringEncoding] stringByReplacingPercentEscapesUsingEncoding: NSISOLatin1StringEncoding]; – Chris
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];
- (NSString *)URLDecode:(NSString *)stringToDecode
{
NSString *result = [stringToDecode stringByReplacingOccurrencesOfString:@"+" withString:@" "];
result = [result stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
return result;
}
to wszystko
również mi się udało, dzięki! – estoy
do rozwiązania parmanent na iOS 9, używać odłogowania kod
NSURL* link = [NSURL URLWithString:[url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]];
Twoja odpowiedź dotyczy kodowania ciągu, ale potrzebujemy tego, aby rozszyfrować ciąg znaków. – Demona
całkiem poręczny – Chris
Wierzę, że wynik NSString, faktycznie powinien być wynikiem NSString *. – christophercotton
Jak mówisz ... – BadPirate