iOS base64和URLEncode解决数据传输问题

热门标签

特别声明:文章多为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系!

新项目里,有些地方传输中文, GET,参数采用base64编码, 上传的时候,发现安卓可以成功,iOS不行

iOS发送的请求, base64后含有 "+" 和 "/" 在服务器端都会显示成" " (也就是空格). 因而无法解码.

原文: 1977我不记得了
base64编码:MTk3N+aIkeS4jeiusOW+l+S6hg==
iOS抓包此参数为:MTk3N+aIkeS4jeiusOW+l+S6hg==
安卓本地log为:MTk3N+aIkeS4jeiusOW+l+S6hg==
安卓抓包此参数为:MTk3N%2BaIkeS4jeiusOW%2Bl%2BS6hg%3D%3D%0A

我们再把安卓的数据分成两部分:(MTk3N%2BaIkeS4jeiusOW%2Bl%2BS6hg%3D%3D)+(%0A) 

后面的%0A是换行,没有实际意义,那么答案就跃然纸上 安卓发网络请求的时候,系统自动把base64的编码,进行了urlecode处理, 而ios的网络请求,并未做此处理.

iOS处理方法: (文本) ->(base64编码)->(urlencode编码)->搞定

话不多说,直接上代码:

base64编码

//base64encode
+ (NSString *)base64StringFromText:(NSString *)text{
    
    NSData *encodeData = [text dataUsingEncoding:NSUTF8StringEncoding];
    NSString *base64String = [encodeData base64EncodedStringWithOptions:0];
    
    return base64String;
}


//base64encode then urlencode (采用这个方法,一步到位)
+(NSString *)base64AndUrlencodeStringFromText: (NSString *)text{
    
    NSData *encodeData = [text dataUsingEncoding:NSUTF8StringEncoding];
    NSString *base64String = [encodeData base64EncodedStringWithOptions:0];
    
    NSString *encodedString = (NSString *)
    CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                              (CFStringRef)base64String,
                                                              NULL,
                                                              (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                                              kCFStringEncodingUTF8));
    
    return encodedString;
}


//base64decode
+ (NSString *)textFromBase64String:(NSString *)text{
    
    NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:text options:0];
   
    NSString *decodedString = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding];
    
    return decodedString;
}

urlencode编码

//urlencode
+(NSString*)encodeString:(NSString*)unencodedString{
    
    NSString *encodedString = (NSString *)
    CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                              (CFStringRef)unencodedString,
                                                              NULL,
                                                              (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                                              kCFStringEncodingUTF8));
    
    return encodedString;
}


//urldecode
+(NSString *)decodeString:(NSString*)encodedString{
  
    NSString *decodedString  = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,
                                                                                                                     (__bridge CFStringRef)encodedString,
                                                                                                                     CFSTR(""),
                                                                                                                     CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
    return decodedString;
}

 

标签:

未经允许不得转载:作者:SheaYang, 转载或复制请以 超链接形式 并注明出处 技术Dog|博客
原文地址:《iOS base64和URLEncode解决数据传输问题》 发布于2019-12-03

分享到:
赞(0)

评论 抢沙发

6 + 2 =


iOS base64和URLEncode解决数据传输问题

长按图片转发给朋友

Vieu4.0主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录