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成+号。

在经过一番搜索之后,没有找到特别优雅的处理方式,一般的处理都是先将+号替换成空格,然后再decode:

NSString *preResult = [src stringByReplacingOccurrencesOfString:@"+" withString:@" "];

NSString *result = [preResult stringByRemovingPercentEncoding];

如果原数据中包含+号,经过替换之后就出错了?

不是的,这就需要保证+号要经过encode,encode之后是%2b

NSCharacterSet *set = [[NSCharacterSet characterSetWithCharactersInString:@"!*'();:@&=+$,/?%#[] "] invertedSet];

NSString *value = [@"+" stringByAddingPercentEncodingWithAllowedCharacters:set];

保证stringByAddingPercentEncodingWithAllowedCharacters中配置了+号。

相关文章:

gcc function __attribute__
计算机系统中的时间戳
UTF-8 BOM EF BB BF 问题
iOS Crash log 符号化
iOS performSelector使用int等基本数据类型的问题

发表留言

您的电子邮箱地址不会被公开,必填项已用*标注。发布的留言可能不会立即公开展示,请耐心等待审核通过。