J'ai essayé beaucoup d'approches là-bas, mais cette minuscule chaîne ne peut tout simplement pas être décodée par une URL.
NSString *decoded;
NSString *encoded = @"fields=ID%2CdeviceToken";
decoded = (__bridge NSString*)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, (CFStringRef)encoded, NULL, NSUTF8StringEncoding);
NSLog(@"decodedString %@", decoded);
Le code ci-dessus enregistre simplement la même chaîne (!) Après avoir remplacé le pourcentage d'évasions.
Existe-t-il une solution fiable? Je pense qu'une solution RegEx basée sur une documentation pourrait fonctionner. Toute suggestion?
Utilisez CFSTR("")
au lieu de NULL
pour l'avant-dernier argument. De la référence CFURL :
personnagesToLeaveEscaped
Caractères dont vous souhaitez conserver les séquences d'échappement en pourcentage, telles que% 20 pour un caractère d'espacement. Passez NULL pour spécifier qu'aucun pourcentage d'échappement ne doit être remplacé ou la chaîne vide (CFSTR ("")) pour spécifier que tous doivent être remplacés.
NSString *encoded = @"fields=ID%2CdeviceToken";
NSString *decoded = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, (CFStringRef)encoded, CFSTR(""), kCFStringEncodingUTF8);
NSLog(@"decodedString %@", decoded);
Impressions:
2013-03-26 21: 48: 52.559 URLDecoding [28794: 303] decodedString fields = ID, deviceToken
Une autre option serait:
NSString *decoded = [encoded stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
CFURLCreateStringByReplacingPercentEscapesUsingEncoding est obsolète dans iOS 9. Utilisez plutôt stringByRemovingPercentEncoding .
NSString *decoded = [encoded stringByRemovingPercentEncoding];
Swift 3
import Foundation
let charSet = CharacterSet.urlPathAllowed.union(.urlQueryAllowed) // just use what you need, either path or query
let enc = "Test Test Test".addingPercentEncoding(withAllowedCharacters: charSet)!
let dec = enc.removingPercentEncoding!
print("Encoded: \(enc)")
print("Decoded: \(dec)")
Sortie:
Encodé: Test% 20Test% 20Test
Décodé: Test Test Test