iOS中访问HTTP资源需要对URL进行Encode才能正确访问。

OC中有方法:

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

例如:

NSString *url=@"http://unmi.cc?p1=%+&sd &p2=中文";

NSString *encodedValue = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

结果是:

http://unmi.cc?p1=%25+&sd%20&p2=%E4%B8%AD%E6%96%87

但是仍不能转换URL中的?%&符号,我们需要单独编码参数,然后再拼接成URL之前将属性参数值中的?%&等符号分别替换成相应的编码。

也可以用以下方式单独编码参数值,然后拼接成完整的URL:

方法:/* newString = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, origString, NULL, NULL, kCFStringEncodingUTF8); */

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

CoreFoundation里面的CFStringRef和NSString*是可以直接转换的,两种也都有一个相似的用来直接赋常量的操

作。例如:

CFStringRef a = CFSTR("a");
NSString *b = @"b";

CFSTR是一个宏,这个宏的定义可能是CFStringMakeConstantString,也可能是__builtin___CFStringMakeCo-

nstantString。如果是CFStringMakeConstantString,看看CFStringMakeConstantString的实现就会明白,

CFSTR("a")是存放在一个全局字典里面的,下次用到CFSTR("a")的时候先查字典里面有没有,如果有就是用存

在的,如果没有则分配一个,并且放到字典里面。

所以这里有两个需要注意的,一:CFSTR分配出来的字符串对象是不能自己释放的,如果你释放了下次在使用就

会使用到一个野对象;二:多线程使用可能会出问题,因为全局的字典是没有锁的。

而NSString的@有些不一样,应该和__builtin___CFStringMakeConstantString有些类似,允许你多线程使用,

同样也不需要你自己去release,可以理解为b是一个autorelease的对象,系统会自己自动收回b。如果想长时间持

有b那就retain,但不要忘了release。

CFURLCreateStringByAddingPercentEscapes与CFURLCreateStringByReplacingPercentEscapesUsingEncoding的更多相关文章

  1. 使用CFURLCreateStringByAddingPercentEscapes进行URL编码

    iOS程序访问HTTP资源时需要对URL进行UTF8编码,特酷吧在之前一直都喜欢使用NSString的stringByAddingPercentEscapesUsingEncoding方法进行编码.今 ...

  2. URL编码CFURLCreateStringByAddingPercentEscapes使用(ARC)

    URL 编码:CFURLCreateStringByAddingPercentEscapes If you have tried to send any information using a GET ...

  3. url 转码

    //URL解码 //-(NSString *)URLDecodedString:(NSString *)str //{ // NSString *decodedString=(__bridge_tra ...

  4. iOS开发——网络编程OC篇&使用WebView构建HyBird应用

    使用WebView构建HyBird应用 HyBird是一种本地技术与Web相结合,能过实现跨平台的移动应用开发,最常用的一个框架:PhoneGap 一:首先,写好html代码 <!DOCTYPE ...

  5. iOS网络编程同步GET方法请求编程

    iOS SDK为HTTP请求提供了同步和异步请求两种不同的API,而且可以使用GET或POST等请求方法.我们先了解其中最为简单的同步GET方法请求. 首先实现查询业务,查询业务请求可以在主视图控制器 ...

  6. NSString+URLEncoding.h --使用Obj-C对数据等进行URLEncoding编码

    在Objective-c进行网络编程时,经常需要把数据转换成URLEncoding编码,如对+号编码后,变成%2b.这里我们给出一种实现. //NSString+URLEncoding.h #impo ...

  7. 将string转换成UTF8在进行请求

    在请求服务器时,如果参数中带有中文字符.就会报参数格式错误,需要将其转换成UTF8 @interface NSString (NSURLUtilities) /* Adds all percent e ...

  8. emjio表情转json

    今天碰到了上传文字给服务端的时候emjio表情转成json就不对了 有大神帮忙解决了,记笔记记笔记--- #import "NSString+EncodedString.h" @i ...

  9. iOS Get方式带中文不能请求网络

    今天发现一个蛋疼的问题,使用ASIHTTPRequest Get方式请求数据时候带中文,iOS客户端不能正确进行网络请求. NSURL *url = [NSURL URLWithString:@htt ...

随机推荐

  1. php设计模式--面向对象

    php链式操作的实现: 特点:1.链式操作一般存在于面向对象的情况下链式操作才有意义 /* * SQL语句组合实例类,始发文章web开发笔记 * 学习用,非专业类 * */ class sql{ pr ...

  2. Azure AD Connect 手动同步

    我们目前采用工具Azure AD Connect 目录同步工具将本地域控制器的用户信息同步至office365和Azure 在之前目录同步工具中使用Windows 任务计划程序或单独的 Windows ...

  3. Kinect2.0 for Mac开箱

    前段时间从米国带回来一个Kinect,坑爹地发现需要适配器才能连接电脑.于是又从微软官网下单了适配器.今天终于在Mac上把Kinect装起来跑了,与大家分享一点图片. Kinect驱动安装 Kinec ...

  4. Banner中利用Jquery隐藏显示下方DIV块

    实现方式1: <!DOCTYPE html><html><head>    <meta charset="UTF-8">    &l ...

  5. js获取当前系统时间

    Js获取当前日期时间及其它操作var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份 ...

  6. 建模前的数据清洗/ETL(python)

    1. 读取数据 data= open('e:/java_ws/scalademo/data/sample_naive_bayes_data.txt' , 'r') 2. 把数据随机分割为trainin ...

  7. mysqlbinlog

    一.描述 转换二进制日志为易读的文本格式或用于管道后恢复数据 二.用法 -d, --database=name 仅列出指定数据库的条目 --start-datetime=name 从指定时间开始读取事 ...

  8. django表单验证和跨站伪造csrf

    Form验证 django中的Form一般有两种功能: 输入html 验证用户输入 django使用内置form方法验证表单提交的数据 html页面 <!DOCTYPE html> < ...

  9. A couple of notes about .NET Framework 4.6 setup behaviors

    https://blogs.msdn.microsoft.com/astebner/2015/06/17/a-couple-of-notes-about-net-framework-4-6-setup ...

  10. JAVA源码分析-HashMap源码分析(一)

    一直以来,HashMap就是Java面试过程中的常客,不管是刚毕业的,还是工作了好多年的同学,在Java面试过程中,经常会被问到HashMap相关的一些问题,而且每次面试都被问到一些自己平时没有注意的 ...