Objective-C学习——中文URL编码和解码
2014-03-26 11:15
489 查看
Objective-C学习——中文URL编码和解码
本文是Ctrl+C文章:转入链接:http://jianhai1229.blog.163.com/blog/static/34887000201401491430525/
发现NSString类中有内置的方法可以实现。他们分别是:
- (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)encoding
- (NSString *)stringByReplacingPercentEscapesUsingEncoding:(NSStringEncoding)encoding
只要传入相应的编码即可以进行编码和解码了,不过此方法是对整个Url进行编码的所以如果有Query String中带有&?/等是不会进行编码转换的,如果有这方面的需要的朋友可以参照下面提供的网址,找到解决方法:http://www.cocoachina.com/bbs/read.php?tid-2469.html
示例:
NSString* string1 = @"https://www.cloudsafe.com/文件夹";
NSString* string2 = [string1 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString* string3 = [string2 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString* string4 = [string2 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString* string5 = [string3 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString* string6 = [string4 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString* string7 = [string5 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
输出结果: string5 & 6 重复编码encode
string1:https://www.cloudsafe.com/文件夹
string2:https://www.cloudsafe.com/%E6%96%87%E4%BB%B6%E5%A4%B9
string3:https://www.cloudsafe.com/%25E6%2596%2587%25E4%25BB%25B6%25E5%25A4%25B9
string4:https://www.cloudsafe.com/文件夹
string5:https://www.cloudsafe.com/%E6%96%87%E4%BB%B6%E5%A4%B9
string6:https://www.cloudsafe.com/文件夹
string7:https://www.cloudsafe.com/文件夹
不过这两个方法,都是把输入串认为是完整url来encode的(姑且称为url encode吧),而不是以component方式来encode。这两者有什么区别呢,拿g.cn/?x=5&y=6来说。如果你要传入整个url作为encode的串,那么就应该使用url encode,而不是component encode。因为component encode出来的结果是希望能被用于url的一个部分,它的一个例子是g.cn/?x=/aa/bb。这时候我们就希望那个对/aa/bb里的/也encode,而url encode方式是不会对它做任何处理的。
.......
拖拉乐大半年的东西,今天突然在320里头看到,补出来:
| /** * URL encodes a string */ - (NSString*)stringByURLEncodingStringParameter; //.m - (NSString*)stringByURLEncodingStringParameter { NSString *resultStr = self; CFStringRef originalString = (CFStringRef) self; CFStringRef leaveUnescaped = CFSTR(" "); CFStringRef forceEscaped = CFSTR("!*'();:@&=+$,/?%#[]"); CFStringRef escapedStr; escapedStr = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, originalString, leaveUnescaped, forceEscaped, kCFStringEncodingUTF8); if( escapedStr ) { NSMutableString *mutableStr = [NSMutableString stringWithString:(NSString *)escapedStr]; CFRelease(escapedStr); // replace spaces with plusses [mutableStr replaceOccurrencesOfString:@" " withString:@"%20" options:0 range:NSMakeRange(0, [mutableStr length])]; resultStr = mutableStr; } return resultStr; } |
相关文章推荐
- Objective-C学习——中文URL编码和解码
- Objective-C学习——中文URL编码和解码
- Objective-C学习——中文URL编码和解码
- iOS----Objective-C学习——中文URL编码和解码
- Objective-C学习——中文URL编码和解码
- Objective-C学习——中文URL编码和解码
- Objective-C学习——中文URL编码和解码
- Objective-C学习——中文URL编码和解码
- Objective-C学习——中文URL编码和解码
- Objective-C学习——中文URL编码和解码
- IOS学习 中文URL编码和解码
- Objective-C——中文URL编码和解码
- 中文URL编码和解码
- java web url编码与解码--中文乱码和特殊字符转义问题
- iPhone 中文URL编码(encode)解码(decode)
- Swift学习笔记 - URL编码encode与解码decode
- Swift学习笔记 - URL编码encode与解码decode
- iPhone 中文URL编码(encode)解码(decode)
- jsp学习中。。发现用中文参数创建Cookie会报错,要用编码解码解决。
- [iOS]URL编码和解码