今天跟安卓的同学对接一个问题, 发现了一个及其坑爹的BUG, 安卓在进行UrlEncode编码时, 将空格转义为了"+", 但是iOS这边进行UrlEncode编码时, 是将空格转义为"%20", 这不坑爹的嘛, 在对接的时候两边数据对不上
在Stack Overflow上找到了解释URL encoding the space character: + or %20?
简单来说就是:%20是比较老一点的写法,现在的做法是:url中的“?”前的空格要转义成“%20”,“?”之后的空格要转义成“+”!
而Jave系统中自带的方法是这么做的, 但是在iOS系统中调用
[str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
是将空格转义为了"%20"
经测试后
image.png
后来这边的处理方法为
特殊字符使用
[str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"#%<>[\]^`{|}"]+"].invertedSet];
这个方法去进行UrlEnCode转义,
然后iOS端在解析之前, 先将未转义的字符串中的"+"替换为" "空格
然后再进行
[str stringByRemovingPercentEncoding];
iOS端就可以正常解析使用, 暂时只能想到这个方法