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

  • 相关阅读:
    搭建nexus私服(maven)
    maven配置本地仓库(从本地仓库下载jar包到.m2仓库)
    关于引入多个jquery冲突的问题(附一个很好用的validate前端验证框架及使用方法)
    java excel导出
    Eclipse+Maven创建webapp项目 及部署在tomcat上
    solr添加IK分词和自己定义词库
    将Mysq数据导入solr索引库
    solr +zookeeper+Jetty 集群搭建
    solr +zookeeper+tomcat 集群搭建
    如何用Maven创建web项目(具体步骤)转载
  • 原文地址:https://www.cnblogs.com/lidongxiao/p/5867581.html
Copyright © 2011-2022 走看看