我在之前一直都使用NSString的stringByAddingPercentEscapesUsingEncoding方法,究其原因可能是用起来简单吧,可以很容易的将url中的中文进行编码,是很有用的一个方法,但是在一次使用过程中却出现了问题,看下面的代码
NSString *urlStr =
@"http://7xoztu.media1.z0.glb.clouddn.com/%E7%8C%9C%E7%8C%9C%E6%88%91%E6%9C%89%E5%A4%9Aai%E4%BD%A0%20-%20%E9%93%83%E5%A3%B0.mp3";
NSString *url =
[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
然后在友盟的分享操作中,将该音乐的url进行分享时出现访问错误,最后发现当urlStr中存在字符"%"时,使用上面的方法,会默认也进行"%"的编码,于是就造成了访问错误.
最后查资料,对一些特定的字符串进行处理时应该换一种方法CFURLCreateStringByAddingPercentEscapes,参数含义如下面的
CFStringRef CFURLCreateStringByAddingPercentEscapes(
CFAllocatorRef allocator,
CFStringRef originalString, /*待转码的字符串*/
CFStringRef charactersToLeaveUnescaped, /*指示不转义的字符*/
CFStringRef legalURLCharactersToBeEscaped,/*指示确定转义的字符*/
CFStringEncoding encoding); /*编码类型*/
如果同样需要对上面的urlStr进行编码,但是指定字符"%"不处理,对了,这个方法默认也是对字符"%"进行编码的,使用方法参考下面的
NSString *url = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)(urlStr), (CFStringRef)@"%", NULL, kCFStringEncodingUTF8));
最后便能够得到正确的url,成功的做到分享了.