最近项目中,遇到这么一个奇怪的问题,当我给服务端发送一个含有%的字符串的时候,%竟然不见了
就比如说,我发送了一个%,后台获取到的数据为空,我发送%1,后台收到的是1,我发送%%%%,后台依旧收到的是空。
后来想到,之前有过显示“%”的问题,然后通过转义“%%”来实现了的,感觉应该是需要转义的,但是这个换做了%%%,无论多少个字符,依旧发过去的是空。查看了一下传递过去时候的数据,也是我想传输的数据啊,有点百思不得其解。
后来又搜了下,看到别人用NSURLConnection传输时候遇到了同样的问题,意思就是在发送请求的时候,如果url中含有特殊字符就会出现发送为空的情况。但是在发送之前对这些特殊符号做一次UTF8处理就可以解决了,否则这些字符就会为空显示,处理方法如下
(ARC)
NSString *baseStr = [imgData base64Encoding];
NSString *baseString = (__bridge NSString *) CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)baseStr,
NULL,
CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8);
[urlRequest setHTTPBody:[baseString dataUsingEncoding:NSUTF8StringEncoding]];
非ARC模式下,需要自己去手动释放
NSString*bodyStr =@"google+";
NSString*bStr =CFURLCreateStringByAddin
[urlRequest setHTTPBody:[bStr
[bStr release]
这样一来 问题就很完美的解决了
后来搜了下__bridge,不是很清晰,大意就是core foundation类型的和OC一些数据类型转换相关,