码迷,mamicode.com
首页 > Web开发 > 详细

NSString转NSURL失败的解决办法

时间:2016-10-21 00:25:32      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

NSString转NSURL失败的解决办法

     url支持26个英文字母、数字和少数几个特殊字符,因此,对于url中包含非标准url的字符时,就需要对其进行编码。iOS中提供了函数stringByAddingPercentEscapesUsingEncoding对中文和一些特殊字符(下面已证实包含"%")进行编码,但是stringByAddingPercentEscapesUsingEncoding的功能并不完善,对一些较为特殊的字符无效,或者说对一些我不想编码的字符编码,而对这些字符则可以使用CFURLCreateStringByteAddingPercentEscapes函数.

     我在之前一直都使用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];

    但是当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

 

NSString转NSURL失败的解决办法

标签:

原文地址:http://www.cnblogs.com/ys708001/p/5982754.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!