IOS中URL的编码,对RUL中的中文以及字符进行编码处理

当访问某个服务器的的时候  需要用到NSURL 构建URL的时候路径其中可能包含中文或者一些像&……+¥等符号,但是我们知道如果不对其进行处理的话,访问时就会出问题:如http:/www.nihao.com?arguments=我是一名程序员&name=保密;

如何进行对这些中文进行处理:

首先要先介绍一个下CFURLCreateStringByAddingPercentEscapes 方法,该方法是Core Fundation框架中的方法


定义为:

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

第一个参数是:CFAllocatorRef 不用深究,因为该参数一般默认为kCFAllocatorDefault;

第二个参数是:指的是你要编码的字符串(也就是我们说的URL):http:/www.nihao.com?arguments=我是一名程序员&name=保密

第三个参数是:指定在编码的URL中不需要编码的字符集;

第四个参数是:编码的字符串中需要编码的字符集;

第五个参数是:编码方式


为了说明问题直接上图片和代码

首先定义一个NSString 的类目(类别)主要是为了方便使用


#import "NSString+URLString.h"

@implementation NSString (URLString)
-(NSString *)encodingURLString
{
    NSString *result=(NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)self, (CFStringRef)@"", (CFStringRef)@"", kCFStringEncodingUTF8));
    return result;
}
-(NSString *)decodingURLString{
    NSString *result=CFBridgingRelease(CFURLCreateStringByReplacingPercentEscapesUsingEncoding
                                       (kCFAllocatorDefault,
                                        (CFStringRef)self,CFSTR(""),
                                    kCFStringEncodingUTF8));
    return result;
}

@end

    NSString *path=[NSString stringWithFormat:@"http://webservice.webxml.com.cn/webservices/ChinaStockSmallImageWS.asmx/getSmallImage?theStockCode=234&theImageType=的身&/;][]份"];
    NSURL *url=[NSURL URLWithString:[path encodingURLString]];//使用已经定义好的方法进行编码;

  

编码URL此时CFStringRef charactersToLeaveUnescaped,CFStringRef legalURLCharactersToBeEscaped这两个参数都为空字符串,说明没有特殊说明不被编码和被编码的符号和字符集;但是此方法会有默认编码和不被编码的字符集 ,设置断点查看url的值,如下图:

可以看到中文和][符号已经被编码;但是“;/”没有被编码

如果现在把CFStringRef charactersToLeaveUnescaped, 参数设成(CFStringRef)@“[]”; 再设置断点 查看url的值


可以看到" ]["符号已经显示出来



当我们把CFStringRef legalURLCharactersToBeEscaped 参数设置成  (CFStringRef)@“;/” ;再设置断点查看url的值会发现


会看到所有的   /  变成了 %  此时的URL 肯定不正确;

所以在指定 时一定要注意  指定的字符串集不能影响 URL 的正确性 比如一些 常见的敏感符号  &  /  : ? 等


- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc;

此方法只有一个参数,所以说不能指定特定的符号,不是很灵活.如果CFURLCreateStringByAddingPercentEscapes  不设置特殊的字符集,两者效果大多数情况下编码的结果是一样的。


根据需要选择自己的方法才是最合适的!!!!!



如果有错请指正,-。-!!!~~~~~~~~~~~~~~





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值