zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Codeforces 1045C Hyperspace Highways (看题解) 圆方树
    Codeforces 316E3 线段树 + 斐波那切数列 (看题解)
    Codeforces 803G Periodic RMQ Problem 线段树
    Codeforces 420D Cup Trick 平衡树
    Codeforces 295E Yaroslav and Points 线段树
    Codeforces 196E Opening Portals MST (看题解)
    Codeforces 653F Paper task SA
    Codeforces 542A Place Your Ad Here
    python基础 异常与返回
    mongodb 删除
  • 原文地址:https://www.cnblogs.com/lidongxiao/p/5867581.html
Copyright © 2011-2022 走看看