URL Decode中对于+号的处理
原创 2018-12-09
如果你的产品包含iOS AndroidAPP以及后台服务,你很可能遇到一个加号 decode 后的问题。
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成+号。
easeapi经过一番搜索之后,没有找到特别优雅的处理方式,一般的处理都是先将+号替换成空格,然后再decode:
NSString *preResult = [src stringByReplacingOccurrencesOfString:@"+" withString:@" "];
NSString *result = [preResult stringByRemovingPercentEncoding];
如果原数据中包含+号,经过替换之后就出错了?
不是的,这就需要保证+号要经过encode,encode之后是%2b
:
NSCharacterSet *set = [[NSCharacterSet characterSetWithCharactersInString:@"!*'();:@&=+$,/?%#[] "] invertedSet];
NSString *value = [@"+" stringByAddingPercentEncodingWithAllowedCharacters:set];
保证stringByAddingPercentEncodingWithAllowedCharacters中配置了+号。
相关文章:
UTF-8 BOM EF BB BF 问题
iOS Link Map
iOS Method Swizzling使用陷阱
iOS DeviceCheck详解
iOS Self-Sizing的一点优化
发表留言
您的电子邮箱地址不会被公开,必填项已用*标注。
留言板