使用AFNetworking post请求中文乱码问题

使用AFNetworking post请求中文乱码问题

使用AFNetworking post请求中文乱码问题

ios项目开发时,使用AFN框架向后台发送post请求时出现中文乱码,具体是在请求体的参数中需要包含中文内容,使用charles抓包发现也是中文,单到了后台就是乱码。
后来百度了一下,了解ios中文请求后台是需要转码的,具体需要问后台请求格式是什么,一般都是utf-8格式,也有GBK格式的。下面讲解转码
我们只需要将需要发送到后台的字符串进行编码就好。

1
2
NSString *str1 = @"我是字符串";
NSString *str2 = [str1 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; //utf8编码

你以为这样就完了吗?还没有,这还只是修改了参数,请求头我们还需要修改一个地方

1
2
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
[mgr.requestSerializer setValue:@"application/x-www-form-urlencoded; charset=utf-8" forHTTPHeaderField:@"Content-Type"];

如果你本身就是使用的AFN的post表单提交,可以忽略,如果不是,请添加这个请求头设置。
下面是表单提交的请求头
F90E4976-70B7-4B11-A8B1-7989A5892B1B
而utf8编码后的数据样式是:-%E6%98%AF%E7%9A%84 utf-8编码
后台拿到的就是这样的数据格式,get请求到utf-8编码我们需要解码

1
NSString *str3 = [str2 stringByRemovingPercentEncoding]; //解码

而应我们的项目需求,在post表单时,带的参数要求是中文
C3CF1821-BE7B-4358-889F-79D8D075D528

用的是post表单请求,这个是对NSURLSessionDataTask post请求的封装。
那么我们只需要在请求头设置为@”application/x-www-form-urlencoded; charset=utf-8”就可以了。

-------------本文结束感谢您的阅读-------------