iOS和Android系统URL Decode API在处理+号时有区别。
举个例子,原始数据:
H+ZPXNt8%2F7OvQLAAD%2F%2Fw==
Android:URLDecoder.decode(string, "utf-8")结果是:
H ZPXNt8/7OvQLAAD//w==
而iOS stringByRemovingPercentEncoding结果是:
H+ZPXNt8/7OvQLAAD//w==
两个结果的区别就在于 Android 将+号decode成空格,而 iOS 将+号decode成+号。
在经过一番搜索之后,没有找到特别优雅的处理方式,一般的处理都是先将+号替换成空格,然后再decode:
NSString *preResult = [src stringByReplacingOccurrencesOfString:@"+" withString:@" "];
NSString *result = [preResult stringByRemovingPercentEncoding];
如果原数据中包含+号,经过替换之后就出错了?
不是的,这就需要保证+号要经过encode,encode之后是%2b
:
NSCharacterSet *set = [[NSCharacterSet characterSetWithCharactersInString:@"!*'();:@&=+$,/?%#[] "] invertedSet];
NSString *value = [@"+" stringByAddingPercentEncodingWithAllowedCharacters:set];
保证stringByAddingPercentEncodingWithAllowedCharacters中配置了+号。
留言板