stringByAddingPercentEscapesUsingEncoding: 和 stringByReplacingPercentEscapesUsingEncoding: 的区别是什么?

6

请问stringByAddingPercentEscapesUsingEncoding:stringByReplacingPercentEscapesUsingEncoding:这两种方法有什么区别?

我已经多次阅读了NSString Class Reference,但仍然不明白。

此外,请问是否有一种方法可以强制这些方法也将“+”符号进行编码?

我的iPhone应用程序中,我需要对一个base64编码的头像(即字母、数字、加号和斜杠)进行urlencode处理,最终使用了CFURLCreateStringByAddingPercentEscapes方法而非上述两种方法...

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

编码和解码有什么区别? - Hot Licks
好的,我想我明白了"编码"和"解码"之间的区别。但是"添加"和"替换"对于这些方法来说并不是最佳的命名选择。 - Alexander Farber
1
这是苹果公司的常态,他们就是这样命名的。 - Hot Licks
1个回答

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

这里是输出结果:

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

Original text: One Broadway, Cambridge, MA

缺点: stringByAddingPercentEscapesUsingEncoding 无法编码保留字符如 ampersand (&) 和 slash (/)。

解决方法: 使用 Foundation 函数 CFURLCreateStringByAddingPercentEscapes

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接