中文URL编码和解码

根据上篇文章的TTS的url所获。

发现NSString类中有内置的方法可以实现。他们分别是:

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding
- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding

       只要传入相应的编码即可以进行编码和解码了,不过此方法是对整个Url进行编码的所以如果有Query String中带有&?/等是不会进行编码转换的,如果有这方面的需要的朋友可以参照下面提供的网址,找到解决方法:http://www.cocoachina.com/bbs/read.php?tid-2469.html

示例:

[cpp]  view plain copy
  1. NSString* string1 = @"https://www.cloudsafe.com/文件夹";  
  2.       
  3. NSString* string2 = [string1 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
  4. NSString* string3 = [string2 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
  5.       
  6. NSString* string4 = [string2 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
  7. NSString* string5 = [string3 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
  8.       
  9. NSString* string6 = [string4 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
  10. NSString* string7 = [string5 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];  
  11.       
  12. 输出结果: string5 & 6 重复编码encode  
  13.    
  14. string1:https://www.cloudsafe.com/文件夹  
  15.    
  16. string2:https://www.cloudsafe.com/%E6%96%87%E4%BB%B6%E5%A4%B9  
  17. string3:https://www.cloudsafe.com/%25E6%2596%2587%25E4%25BB%25B6%25E5%25A4%25B9  
  18.    
  19. string4:https://www.cloudsafe.com/文件夹  
  20. string5:https://www.cloudsafe.com/%E6%96%87%E4%BB%B6%E5%A4%B9  
  21.    
  22. string6:https://www.cloudsafe.com/文件夹  
  23. string7:https://www.cloudsafe.com/文件夹  

更改转义特殊字符:

+ ( NSString *)URLencode:( NSString *)originalString
         stringEncoding:( NSStringEncoding )stringEncoding {
     //!  @  $  &  (  )  =  +  ~  `  ;  '  :  ,  /  ?
     //%21%40%24%26%28%29%3D%2B%7E%60%3B%27%3A%2C%2F%3F
     NSArray *escapeChars = [ NSArray arrayWithObjects:@ ";" , @ "/" , @ "?" , @ ":" ,
                             @ "@" , @ "&" , @ "=" , @ "+" ,    @ "$" , @ "," ,
                             @ "!" , @ "'" , @ "(" , @ ")" , @ "*" , nil ];
     
     NSArray *replaceChars = [ NSArray arrayWithObjects:@ "%3B" , @ "%2F" , @ "%3F" , @ "%3A" ,
                              @ "%40" , @ "%26" , @ "%3D" , @ "%2B" , @ "%24" , @ "%2C" ,
                              @ "%21" , @ "%27" , @ "%28" , @ "%29" , @ "%2A" , nil ];
     
     int len = [escapeChars count];
     
     NSMutableString *temp = [[originalString
                               stringByAddingPercentEscapesUsingEncoding:stringEncoding]
                              mutableCopy];
     
     int i;
     for (i = 0; i < len; i++) {
         
         [temp replaceOccurrencesOfString:[escapeChars objectAtIndex:i]
                               withString:[replaceChars objectAtIndex:i]
                                  options: NSLiteralSearch
                                    range: NSMakeRange (0, [temp length])];
     }
     
     NSString *outStr = [ NSString stringWithString: temp];
     
     return outStr;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值