NSString URL解码?

Ger*_*eri 17 nsstring urldecode ios percent-encoding

我已经尝试了很多方法,但这个小小的字符串不能被URL解码.

NSString *decoded;
NSString *encoded = @"fields=ID%2CdeviceToken";
decoded = (__bridge NSString*)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, (CFStringRef)encoded, NULL, NSUTF8StringEncoding);
NSLog(@"decodedString %@", decoded);
Run Code Online (Sandbox Code Playgroud)

上面的代码只是在替换百分比转义后记录相同的(!)字符串.

那里有可靠的解决方案吗?我认为基于某些文档的某种RegEx解决方案可行.有什么建议吗?

rma*_*ddy 32

另一种选择是:

NSString *decoded = [encoded stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

  • 例如,在做完这个之后,我仍然有我的百分比.HTTP%3A%2F%2Fwebsite.com (3认同)

Car*_*zey 17

使用CFSTR("")而不是NULL倒数第二个参数.从CFURL参考:

charactersToLeaveEscaped

其转义序列百分比的字符,例如空格字符的%20,要保持原样.传递NULL以指定不替换百分比转义,或者指定空字符串(CFSTR(""))以指定全部替换.

    NSString *encoded = @"fields=ID%2CdeviceToken";
    NSString *decoded = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL, (CFStringRef)encoded, CFSTR(""), kCFStringEncodingUTF8);
    NSLog(@"decodedString %@", decoded);
Run Code Online (Sandbox Code Playgroud)

打印:

2013-03-26 21:48:52.559 URLDecoding [28794:303] decodingString fields = ID,deviceToken


Moh*_*sul 14

CFURLCreateStringByReplacingPercentEscapesUsingEncoding在iOS版9.使用过时 stringByRemovingPercentEncoding代替.

NSString *decoded = [encoded stringByRemovingPercentEncoding];
Run Code Online (Sandbox Code Playgroud)