ios - encoded - ¿Decodificar la URL de NSString?
url encoding swift (4)
Otra opción sería:
NSString *decoded = [encoded stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
He probado muchos enfoques por ahí, pero esta pequeña y pequeña cadena no puede ser descodificada por URL.
NSString *decoded;
NSString *encoded = @"fields=ID%2CdeviceToken";
decoded = (__bridge NSString*)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, (CFStringRef)encoded, NULL, NSUTF8StringEncoding);
NSLog(@"decodedString %@", decoded);
El código anterior solo registra la misma cadena (!) Después de reemplazar el porcentaje de escapes.
¿Hay una solución confiable por ahí? Creo que algún tipo de solución RegEx basada en alguna documentación podría funcionar. ¿Cualquier sugerencia?
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)")
Salida:
Codificado: Prueba% 20Test% 20Test
Decodificado: Prueba Prueba Prueba
Use CFSTR("")
lugar de NULL
para el segundo al último argumento. De la referencia CFURL :
charactersToLeaveEscaped
Los caracteres cuyo porcentaje de secuencias de escape, como% 20 para un carácter de espacio, querrán dejar intactos. Pase NULL para especificar que no se reemplazará el porcentaje de escapes, o la cadena vacía (CFSTR ("")) para especificar que todos se reemplazarán.
NSString *encoded = @"fields=ID%2CdeviceToken";
NSString *decoded = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, (CFStringRef)encoded, CFSTR(""), kCFStringEncodingUTF8);
NSLog(@"decodedString %@", decoded);
Huellas dactilares:
2013-03-26 21: 48: 52.559 URLDecoding [28794: 303] campos decodedString = ID, deviceToken
CFURLCreateStringByReplacingPercentEscapesUsingEncoding está en desuso en iOS 9. En su lugar, use stringByRemovingPercentEncoding .
NSString *decoded = [encoded stringByRemovingPercentEncoding];