美文网首页
NSString转NSURL遇到的问题及解决办法

NSString转NSURL遇到的问题及解决办法

作者: YaleSun | 来源:发表于2018-05-04 10:22 被阅读0次

    NSString转NSURL失败的解决办法

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

    但是当字符串中存在字符"%"时,使用上面的方法,会默认也进行"%"的编码,于是就造成了访问错误.对一些特定的字符串进行处理时应该换一种方法CFURLCreateStringByAddingPercentEscapes,参数含义如下面的

    CFStringRef CFURLCreateStringByAddingPercentEscapes(
    CFAllocatorRef allocator,
    CFStringRef originalString, /*待转码的字符串*/
    CFStringRef charactersToLeaveUnescaped, /*指示不转义的字符*/
    CFStringRef legalURLCharactersToBeEscaped,/*指示确定转义的字符*/
    CFStringEncoding encoding); /*编码类型*/
    

    如果同样需要对上面的urlStr进行编码,但是指定字符"%"不处理,对了,这个方法默认也是对字符"%"进行编码的,使用方法参考下面的

    NSString *url = CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)(urlStr), (CFStringRef)@"%", NULL, kCFStringEncodingUTF8));
    

    相关文章

      网友评论

          本文标题:NSString转NSURL遇到的问题及解决办法

          本文链接:https://www.haomeiwen.com/subject/kmzrrftx.html