根据上篇文章的TTS的url所获。
发现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/文件夹
更改转义特殊字符:
+ (
NSString
*)URLencode:(
NSString
*)originalString
stringEncoding:(
NSStringEncoding
)stringEncoding {
//! @ $ & ( ) = + ~ ` ; ' : , / ?
//%21%40%24%26%28%29%3D%2B%7E%60%3B%27%3A%2C%2F%3F
NSArray
*escapeChars = [
NSArray
arrayWithObjects:@
";"
, @
"/"
, @
"?"
, @
":"
,
@
"@"
, @
"&"
, @
"="
, @
"+"
, @
"$"
, @
","
,
@
"!"
, @
"'"
, @
"("
, @
")"
, @
"*"
,
nil
];
NSArray
*replaceChars = [
NSArray
arrayWithObjects:@
"%3B"
, @
"%2F"
, @
"%3F"
, @
"%3A"
,
@
"%40"
, @
"%26"
, @
"%3D"
, @
"%2B"
, @
"%24"
, @
"%2C"
,
@
"%21"
, @
"%27"
, @
"%28"
, @
"%29"
, @
"%2A"
,
nil
];
int
len = [escapeChars count];
NSMutableString
*temp = [[originalString
stringByAddingPercentEscapesUsingEncoding:stringEncoding]
mutableCopy];
int
i;
for
(i = 0; i < len; i++) {
[temp replaceOccurrencesOfString:[escapeChars objectAtIndex:i]
withString:[replaceChars objectAtIndex:i]
options:
NSLiteralSearch
range:
NSMakeRange
(0, [temp length])];
}
NSString
*outStr = [
NSString
stringWithString: temp];
return
outStr;
}