URL Decode中对于+号的处理
如果你的产品包含iOS Android App以及后台服务,你很可能遇到一个加号 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成+号。
在经过一番搜索之后,没有找到特别优雅的处理方式,一般的处理都是先将+号替换成空格,然后再decode:
NSString *preResult = [src stringByReplacingOccurrencesOfString:@"+" withString:@" "];
NSString *result = [preResult stringByRemovingPercentEncoding];
如果原数据中包含+号,经过替换之后就出错了?
不是的,这就需要保证+号要经过encode,encode之后是%2b:
NSCharacterSet *set = [[NSCharacterSet characterSetWithCharactersInString:@"!*'();:@&=+$,/?%#[] "] invertedSet];
NSString *value = [@"+" stringByAddingPercentEncodingWithAllowedCharacters:set];
保证stringByAddingPercentEncodingWithAllowedCharacters中配置了+号。
版权信息:本文为 kanchuan.com 原创,转载时请明确注明本文链接。
相关文章:
PHP json_encode UTF-8 中文编码问题
UTF-8 BOM EF BB BF 问题
Swift 从 ObservableObject 迁移到 @Observable 的再讨论
iOS 内核级越狱检测屏蔽方案:KernBypass
iOS:IDFV(identifierForVendor)使用陷阱

留言板