NSString转NSURL失败的解决办法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSString转NSURL失败的解决办法相关的知识,希望对你有一定的参考价值。

NSString转NSURL失败的解决办法

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

     我在之前一直都使用NSString的stringByAddingPercentEscapesUsingEncoding方法,究其原因可能是用起来简单吧,可以很容易的将url中的中文进行编码,是很有用的一个方法,但是在一次使用过程中却出现了问题,看下面的代码

    NSString *urlStr [email protected]"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失败的解决办法的主要内容,如果未能解决你的问题,请参考以下文章

android studio更新gradle失败的解决办法-转

sql server 2000,Log.LDF文件丢失,附加数据库失败的解决办法[转]

OCC平台转到VS2015下MFC程序调用控制台失败解决办法

[转]Ubuntu 12.04(32位)安装Oracle 11g(32位)全过程以及几乎所有问题的解决办法

转!Python安装pycurl失败,及解决办

JSON.parse解析出错解决办法