CFURLCreateStringByAddingPercentEscapes,奇怪的行为?

时间:2012-08-23 17:49:11

标签: iphone objective-c urlencode

我正在尝试对URL进行编码,我以前从未这样做过,所以当没有得到预期的结果时我很困惑。 我正在使用CFURLCreateStringByAddingPercentEscapes执行此操作,但返回的内容与任何在线URL编码器/解码器完全不同,例如。

-(void)urlEncodedString{


 NSString *str = @"\"Hi!! my name is John. \n What's your's?\"";

NSLog([(NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)str, NULL, CFSTR("!$&'()*+,-./:;=?@_~"), kCFStringEncodingUTF8) autorelease]);


}

我期待的是:

  

%5C%22Hi%21%21%20my%20name%图20是%20John。%20%5 CN%20What%-27%20your%-27%3F%5C%22

但相反,我得到了:

  

2i2212yame 0s2ohn3.786691E-27020A2º»åå2our0.0000002

那不可能是正常的。我一直在寻找和尝试一切,我做的方式显然应该工作。 有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:5)

您将结果作为第一个字符串传递给NSLog,该字符串需要使用百分号的formatting字符串。你基本上用内存中的随机数据填充字符串来代替每个%escape。使用Objective-C对象说明符修复此日志:

NSLog(@"%@", [(NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)str, NULL, CFSTR("!$&'()*+,-./:;=?@_~"), kCFStringEncodingUTF8) autorelease]);