[iOS]表单请求处理中文字符

前几天在项目里用了表单请求,然后记录了一下,链接附上 表单请求。
今天接口增加了需求,接口中开始支持中文字符了,然后悲剧的事情发生了,由于后台采用的是UTF-8编码,而且表单请求比较奇葩,回来在翻AFN的方法列表的时候,找到了一个方法,可以解决这个问题,so,记录一下
同样还是利用AFN的MultipartFormData请求方法,只不过在拼接请求模块的时候给上内容编码和传输编码

    NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:kURL parameters:nil constructingBodyWithBlock:^(id formData) {

        [formData appendPartWithHeaders:@{@"Content-Disposition" : @"form-data;name=\"hxid\"",
                                          @"Content-Type" : @"text/plain;charset=UTF-8",
                                          @"Content-Transfer-Encoding" : @"8bit"} body:[kHXID dataUsingEncoding:NSUTF8StringEncoding]];
        [formData appendPartWithHeaders:@{@"Content-Disposition" : @"form-data;name=\"companyName\"",
                                          @"Content-Type" : @"text/plain;charset=UTF-8",
                                          @"Content-Transfer-Encoding" : @"8bit"} body:[self.companyNameTextField.text dataUsingEncoding:NSUTF8StringEncoding]];
        [formData appendPartWithHeaders:@{@"Content-Disposition" : @"form-data;name=\"desc\"",
                                          @"Content-Type" : @"text/plain;charset=UTF-8",
                                          @"Content-Transfer-Encoding" : @"8bit"} body:[self.descTextField.text dataUsingEncoding:NSUTF8StringEncoding]];
    } error:nil];
    
    AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
    
    
    NSURLSessionUploadTask *uploadTask;
    uploadTask = [manager
                  uploadTaskWithStreamedRequest:request
                  progress:^(NSProgress * _Nonnull uploadProgress) {

                  }
                  completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
                      if (error) {
                          NSLog(@"Error: %@", error);
                      } else {
                          if ([[responseObject[@"code"] stringValue] isEqualToString:@"1"]) {
                              NSLog(@"创建公司成功");
                              [self searchCompanyID];
                          } else {
                              NSLog(@"创建公司失败%@", responseObject);
                          }
                      }
                  }];
    
    [uploadTask resume];

这样就能正常处理中文字符了。

你可能感兴趣的:([iOS]表单请求处理中文字符)