CFURLCreateStringByAddingPercentEscapes与CFURLCreateStringByReplacingPercentEscapesUsingEncoding
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"); CFSTR是一个宏,这个宏的定义可能是CFStringMakeConstantString,也可能是__builtin___CFStringMakeCo- nstantString。如果是CFStringMakeConstantString,看看CFStringMakeConstantString的实现就会明白, CFSTR("a")是存放在一个全局字典里面的,下次用到CFSTR("a")的时候先查字典里面有没有,如果有就是用存 在的,如果没有则分配一个,并且放到字典里面。 所以这里有两个需要注意的,一:CFSTR分配出来的字符串对象是不能自己释放的,如果你释放了下次在使用就 会使用到一个野对象;二:多线程使用可能会出问题,因为全局的字典是没有锁的。 而NSString的@有些不一样,应该和__builtin___CFStringMakeConstantString有些类似,允许你多线程使用, 同样也不需要你自己去release,可以理解为b是一个autorelease的对象,系统会自己自动收回b。如果想长时间持 有b那就retain,但不要忘了release。 |
CFURLCreateStringByAddingPercentEscapes与CFURLCreateStringByReplacingPercentEscapesUsingEncoding的更多相关文章
- 使用CFURLCreateStringByAddingPercentEscapes进行URL编码
iOS程序访问HTTP资源时需要对URL进行UTF8编码,特酷吧在之前一直都喜欢使用NSString的stringByAddingPercentEscapesUsingEncoding方法进行编码.今 ...
- URL编码CFURLCreateStringByAddingPercentEscapes使用(ARC)
URL 编码:CFURLCreateStringByAddingPercentEscapes If you have tried to send any information using a GET ...
- url 转码
//URL解码 //-(NSString *)URLDecodedString:(NSString *)str //{ // NSString *decodedString=(__bridge_tra ...
- iOS开发——网络编程OC篇&使用WebView构建HyBird应用
使用WebView构建HyBird应用 HyBird是一种本地技术与Web相结合,能过实现跨平台的移动应用开发,最常用的一个框架:PhoneGap 一:首先,写好html代码 <!DOCTYPE ...
- iOS网络编程同步GET方法请求编程
iOS SDK为HTTP请求提供了同步和异步请求两种不同的API,而且可以使用GET或POST等请求方法.我们先了解其中最为简单的同步GET方法请求. 首先实现查询业务,查询业务请求可以在主视图控制器 ...
- NSString+URLEncoding.h --使用Obj-C对数据等进行URLEncoding编码
在Objective-c进行网络编程时,经常需要把数据转换成URLEncoding编码,如对+号编码后,变成%2b.这里我们给出一种实现. //NSString+URLEncoding.h #impo ...
- 将string转换成UTF8在进行请求
在请求服务器时,如果参数中带有中文字符.就会报参数格式错误,需要将其转换成UTF8 @interface NSString (NSURLUtilities) /* Adds all percent e ...
- emjio表情转json
今天碰到了上传文字给服务端的时候emjio表情转成json就不对了 有大神帮忙解决了,记笔记记笔记--- #import "NSString+EncodedString.h" @i ...
- iOS Get方式带中文不能请求网络
今天发现一个蛋疼的问题,使用ASIHTTPRequest Get方式请求数据时候带中文,iOS客户端不能正确进行网络请求. NSURL *url = [NSURL URLWithString:@htt ...
随机推荐
- sqli篇-本着就了解安全本质的想法,尽可能的用通俗易懂的语言去解释安全漏洞问题
前言 最早接触安全也是从xss攻击和sql注入攻击开始的. 和xss一样屡居OWASPtop10 前三名的漏洞,sqli(sql Injection)sql注入攻击也是web安全中影响较大和影响范围较 ...
- 【BZOJ 1016】【JSOI 2008】最小生成树计数
http://www.lydsy.com/JudgeOnline/problem.php?id=1016 统计每一个边权在最小生成树中使用的次数,这个次数在任何一个最小生成树中都是固定的(归纳证明). ...
- Appium简单测试用例
工程目录如下: 封装初始化androiddriver 方法 import org.openqa.selenium.remote.DesiredCapabilities; import java.io. ...
- java学习笔记之正则表达式
一般来说,正则表达式就是以某种方式来描述字符串,因此你可与说:"如果一个字符串符合有这些东西,那么它就是我正在找的东西. 1.要找一个数字,如果它可能有一个负号在最前面(可能没有,没有也是匹 ...
- Emeditor批量修改文件编码格式(UTF-8)
采用宏的形式进行,直接在Emeidor导入宏即可使用: emeditor导入宏:[宏]->[自定义]->[新建]->找到EncodingChange.jsee文件即可. 链接:htt ...
- bzoj4443[SCOI2015]小凸玩矩阵
题意:一个n*m的矩阵(n<=m<=250),要求选出n个数(每行,每列最多选一个),求第k大数的最小值. 首先第k大的意思是从大到小的第k个数(我读错了,WA了一次还以为算法不对...) ...
- windows使用git时出现:warning: LF will be replaced by CRLF
windows中的换行符为 CRLF, 而在linux下的换行符为LF,所以在执行add . 时出现提示: 执行以下代码 $ rm -rf .git // 删除.git $ git config -- ...
- 【总结】浅谈JavaScript中的接口
一.什么是接口 接口是面向对象JavaScript程序员的工具箱中最有用的工具之一.在设计模式中提出的可重用的面向对象设计的原则之一就是“针对接口编程而不是实现编程”,即我们所说的面向接口编程,这个概 ...
- easyui datagrid 悬浮事件
easyui的单元格提示窗体 鼠标悬浮事件 function findAllPreven() { var infoname = $('#area').val(); areadatagrid=$('# ...
- js正则匹配过滤 特殊字符
function stripscript(s) { var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<& ...