搜集资料整理后得出解决方法:
一,使用NSString的方法:
NSString* string2 = [string1 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//这个方法在验证时出错,慎用
NSString* string1 = [string2 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
二、使用CFStringRef的方法
sUrl = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)sUrl, nil, nil, kCFStringEncodingUTF8);
如果在所有的类里都要用到这个方法,可以写成category,然后在头文件import "NSString+URL.h" 即可调用.
.h文件:
@interface NSString (URL)
- (NSString *)URLEncodedString;
@end
.m文件:
#import "NSString+URL.h"
@implementation NSString (URL)
- (NSString *)URLEncodedString
{
NSString *encodedString = (NSString *)
CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)self,
(CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]",
NULL,
kCFStringEncodingUTF8);
return encodedString;
}
@end
但上述两个方法,都不会处理URL中的保留字符,如果要处理保留字符,推荐使用Google的objective c 工具库 GTMNSString+URLArguments来处理:
http://code.google.com/p/google-toolbox-for-mac/source/browse/trunk/Foundation/GTMNSDictionary%2BURLArguments.h