极速赛车APP下载

IOS使用CFURLCreateStringByAddingPercentEscapes进行URL编码

电脑杂谈  发布时间:2019-08-05 22:01:22  来源:网络整理

php url utf8编码_ios url utf8编码_ios string utf8编码



iOS程序访问HTTP资源时需要对URL进行UTF8编码,我在之前一直都喜欢使用NSString的stringByAddingPercentEscapesUsingEncoding方法进行编码。今天在使用Analyze分析工程时,提示下面的方法可能存在内存泄露:

NSString *enString =(NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)stringURL, NULL, NULL, kCFStringEncodingUTF8);

ios url utf8编码_php url utf8编码_ios string utf8编码

注意到这个方法也是一个编码方案,就查询了两种方式的区别,有些收获。额外学习UITabBarController隐藏tabBar以及addChildViewController

stringByAddingPercentEscapesUsingEncoding方法有一个问题:不会转转URL中的”%&?”等符号[这个很好理解,因为不好区分这些特殊字符到底是连接符号还是参数值]。这些字符在URL语法中有特殊的含义,如果在URL的参数中有这些字符,就需要转化为”%+ASCII”的形式。如果参数中存在这些字符,而我们又使用了stringByAddingPercentEscapesUsingEncoding方法,则服务器会将参数中的没有转义的&当做分隔符,造成分析错误。因为我的工程中几乎没有在参数中存在%&等符号的情况,所以一直用也没问题。但咱们还是要使用正规的方式。

一般来说都是用:

ios string utf8编码_ios url utf8编码_php url utf8编码

123456

CFStringRefCFURLCreateStringByAddingPercentEscapes( CFAllocatorRef allocator, CFStringReforiginalString,/*待转码的类型*/ CFStringRef charactersToLeaveUnescaped,/*指示不转义的字符*/ CFStringReflegalURLCharactersToBeEscaped,/*指示确定转义的字符*/ CFStringEncoding encoding);/*编码类型*/

该函数的格式如下:int scanf (“(控制串》”,(参数表))该函数的参数由两部分组成,其中一部分是由双引号括起来被称为控制串,另一部分是参数表ios url utf8编码,(控制串)中包含格式符和一般字符。分割url和传输数据,参数之间以&相连,%xx中的xx为该符号以16进制表示的ascii,如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用base64加密。例如表6.2 (d)的编码方案,字符a 的编码01 是字符b 的编码010 的前缀部分,这样对于代码串0101001,既是aac 的代码,也是abd 和bda 的代码ios url utf8编码,因此,这样的编码不能保证译码的唯一性,我们称之为具有二义性的译码。

ios string utf8编码_php url utf8编码_ios url utf8编码

示例Demo如下:

123

CFStringRefescaped =CFURLCreateStringByAddingPercentEscapes(NULL,(CFStringRef)self,NULL,(CFStringRef)@"!*'();:@&=+$,/?%#[]",kCFStringEncodingUTF8); NSString *out= [NSStringstringWithString:(NSString *)escaped]; CFRelease(escaped);//记得释放

ios url utf8编码_ios string utf8编码_php url utf8编码

另外一个小知识点:

在之前做图片切割时经常用到如下代码

12

CGImageRefnewImageRef =CGImageCreateWithImageInRect(sourceImageRef,rect); UIImage *newImage= [UIImageimageWithCGImage:newImageRef];

极速赛车APP下载实际上这个代码会造成内存泄露,正确的方式是还需要释放newImageRef,如下:

123

pdc->patblt(rect.left, rect.top, rect.width(), rect.height(), patcopy)。rectangle(image, point(rect.x, rect.y), point(rect.x + rect.width, rect.y + rect.height ), green, 2)。m_pformview->setwindowpos(null, rect.left, rect.top, rect.width(), rect.height(), swp_noactivate | swp_nozorder)。


本文来自电脑杂谈,转载请注明本文网址:
http://www.0531mai.com/a/jisuanjixue/article-118189-1.html

    相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    极速赛车APP下载 极速赛车手机官网 极速赛车APP 极速赛车手机版下载 极速赛车手机官网 极速赛车APP下载 极速赛车双面盘 极速赛车手机版下载 极速赛车双面盘 极速赛车双面盘