encoded ios nsstring urldecode percent-encoding

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