URL codieren String in iOS fehl
-
26-10-2019 - |
Frage
Ich versuche, eine Zeichenfolge in meiner iOS 5 -App mit ARC zu codieren.
So mache ich es:
- (NSString *)escape:(NSString *)text
{
return (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(__bridge CFStringRef)text, NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
}
Ich nenne es dann mit solchen Testdaten:
NSLog([self escape:@"kalel///&&&???"]);
Aber die Ausgabe, die ich von der bekomme NSLog
ist das:
kalel0.0000000.0000000.00000022623F0.0000000.000000
Das scheint einfach nicht richtig zu sein, aber egal was ich nicht richtig machen kann
Lösung
Dein escape
Funktion ist in Ordnung. Das Problem ist in einer Weise, die Sie anrufen NSLog
:
escape
produziert die Schnur kalel%2F%2F%2F%26%26%26%3F%3F%3F
Für Ihre Eingabe. NSLog
interpretiert diese Zeichenfolge als Formatzeichenfolge und druckt einen Müll als schwimmende Punktnummern gleich danach kalel
Wort!
Sie sollten immer anrufen NSLog
Mit einer Stringkonstante als erstes Argument, z. B.:
NSLog(@"%@", [self escape:@"kalel///&&&???"]);
Ps Sie haben ein Speicherleck in escape
--- Du solltest return (__bridge_transfer NSString *)
Wenn Sie eingehaltenes CF -Objekt in den objektiven C -Speicherplatz übertragen.