• iOS中文网址路径转换URLEncode


    如果返回的URL中有中文可以用此方法转换

     今天发现一个蛋疼的问题,服务端返回的urlString里面有时含有中文,使用

    [NSURL URLWithString:urlString]生成URL对象时,iOS客户端不能正确进行网络请求,网上找到的URLEncode方法又不能完全解决问题.

       方法1:

    NSString* encodedString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];


       方法2:

    NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)urlString,NULL,NULL,kCFStringEncodingUTF8);


       这两种方法当urlString里含有中文时URL编码是正确的,但是如果其中含有已转义的%等符号时,又会再次转义而导致错误.

       

       查看方法2参数说明:

     

    CFStringRef CFURLCreateStringByAddingPercentEscapes(CFAllocatorRef allocator, CFStringRef originalString, CFStringRef charactersToLeaveUnescaped, CFStringRef legalURLCharactersToBeEscaped, CFStringEncoding encoding);


    因此做出修改,写出方法:

        NSString *encodedString = (NSString *)

        CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,

                                                (CFStringRef)urlString,

                                                (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]",

                                                NULL,

                                                kCFStringEncodingUTF8);



    如果在所有的类里都要用到这个方法,可以写成category,然后在头文件import "NSString+URL.h" 即可调用.


    NSString+URL.h  文件

    1. @interface NSString (URL)  
    2. - (NSString *)URLEncodedString;  
    3. @end 

    NSString+URL.m  文件

    1. #import "NSString+URL.h"  
    2.   
    3. @implementation NSString (URL)  
    4.   
    5. - (NSString *)URLEncodedString  
    6. {  
    7.     NSString *encodedString = (NSString *)  
    8.     CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,  
    9.                                             (CFStringRef)self,  
    10.                                             (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]",  
    11.                                             NULL,  
    12.                                             kCFStringEncodingUTF8);  
    13.     return encodedString;  
    14. }  
    15. @end 

     

    调用方法:

        NSString *encodedString = [urlString URLEncodedString];

        //encodedString do something

  • 相关阅读:
    《编写高质量代码》读书笔记一
    [转] Markdown
    皓首穷经还是及时行乐!
    有用的iOS网站地址
    [股票] 入市
    https原理 就是两次http
    数据预处理
    重新建立程序员的应对方式
    ROC曲线手画
    机器学习的总结
  • 原文地址:https://www.cnblogs.com/lidongxiao/p/5867581.html
Copyright © 2020-2023  润新知