美文网首页iOS
stringByAddingPercentEscapesUsin

stringByAddingPercentEscapesUsin

作者: Crazy2015 | 来源:发表于2016-06-30 22:04 被阅读1332次

当网址中含有中文字符时我们无法直接使用,需要把网址的字符串编码后再转为URL。由于URL支持26个英文字母、数字和少数几个特殊字符,因此,对于url中包含非标准url的字符时,就需要对其进行编码。
  
iOS中提供了函数,

stringByAddingPercentEscapesUsingEncoding

对中文和一些特殊字符进行编码.

但是stringByAddingPercentEscapesUsingEncoding的功能并不完善,对一些较为特殊的字符无效。

而对这些字符则可以使用

CFURLCreateStringByteAddingPercentEscapes函数

解码可以使用函数

- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding

例:

NSString* string1 = @”https://www.cloudsafe.com/文件夹”
NSString* string2 = [string1 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString* string4 = [string2 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

输出结果:

string1:https://www.cloudsafe.com/文件夹
string2:https://www.cloudsafe.com/%E6%96%87%E4%BB%B6%E5%A4%B9
string4:https://www.cloudsafe.com/文件夹
URL编码

在网络开发中, 如果请求的url包含中文 空格等一些特殊的字符, url必须进行转义后才能请求成功。

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

- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding

- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding
只要传入相应的编码即可以进行编码和解码了,不过此方法是对整个Url进行编码的

所以如果有Query String中带有&?/等是不会进行编码转换的,如果有这方面的需要的朋友可以参照下面提供的网址,找到解决方法:[http://www.cocoachina.com/bbs/read.php?tid-2469.html]
NSString *urlString = [NSString stringWithFormat:@"http://www.xxxx.com/?param=%@",@"中文"];

如果直接用这个url去请求会报错,需要先转义,
NSString提供方法

编码 :
stringByAddingPercentEscapesUsingEncoding: 
解码:
stringByReplacingPercentEscapesUsingEncoding: 
urlString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url = [NSURL URLWithString:urlString];

相关文章

网友评论

    本文标题:stringByAddingPercentEscapesUsin

    本文链接:https://www.haomeiwen.com/subject/evdfjttx.html