stringByAddingPercentEscapesUsingEncoding:和stringByReplacingPercentEscapesUsingEncoding有什么区别:

Ale*_*ber 6 objective-c url-encoding nsstring ios

2种方法之间的区别是什么,请 stringByAddingPercentEscapesUsingEncoding:stringByReplacingPercentEscapesUsingEncoding:

我已经多次阅读过NSString Class Reference但仍然没有得到它.

另外,还有一种方法可以强制这些方法编码"+"符号吗?

我的iPhone应用程序中,我必须urlencode base64编码(即字母,数字,加号和斜杠)头像,最后使用该CFURLCreateStringByAddingPercentEscapes方法而不是上述方法...

- (NSString*)urlencode:(NSString*)str
{
    return (NSString*)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(
        NULL,
        (__bridge CFStringRef) str,
        NULL,
        CFSTR("+/"),
        kCFStringEncodingUTF8));
}
Run Code Online (Sandbox Code Playgroud)

Gui*_*rme 17

stringByAddingPercentEscapesUsingEncoding 将Unicode*字符转换为百分比转义格式.

stringByReplacingPercentEscapesUsingEncoding 将执行相反的操作,将百分比转义转换为Unicode*.

*实际上不是Unicode,而是您选择的编码.

例子:

NSString *rawText = @"One Broadway, Cambridge, MA"; 
NSString *encodedText = [rawText stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"Encoded text: %@", encodedText);
NSString *decodedText = [encodedText stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"Original text: %@", decodedText);
Run Code Online (Sandbox Code Playgroud)

这是输出:

Encoded text: One%20Broadway,%20Cambridge,%20MA

Original text: One Broadway, Cambridge, MA
Run Code Online (Sandbox Code Playgroud)

缺点:stringByAddingPercentEscapesUsingEncoding不编码&符号(&)和斜杠(/)等保留字符

解决方法:CFURLCreateStringByAddingPercentEscapes改为使用Foundation功能.

资料来源:http://cybersam.com/ios-dev/proper-url-percent-encoding-in-ios