美文网首页
iOS给Java后台传递json格式的数据GBK编码格式处理

iOS给Java后台传递json格式的数据GBK编码格式处理

作者: 夜轶 | 来源:发表于2019-08-10 14:18 被阅读0次

    今天在一个项目里面后台是个比较老的Java开发人员,编码方式不是utf-8而是gbk格式的,踩了很多坑记录一下给Java传递json数据gbk编码的处理:

     NSString * urlStr = @"http://你的服务器地址";
        
        NSError *error;
        NSDictionary*dic1=@{@"userId":@"110"
                            
                            };
        NSData *jsonData1 = [NSJSONSerialization dataWithJSONObject:dic1 options:0 error:&error];
        NSString *jsonString1 = [[NSString alloc] initWithData:jsonData1 encoding:NSUTF8StringEncoding];
        NSDictionary*body=@{
                            @"data":jsonString1,
                            @"requestCode":@"110"
                            };
        NSError *error1;
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:body options:0 error:&error1];
        NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
        NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
        NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlStr]];
        [urlRequest setHTTPMethod: @"POST"];
        //转成gbk编码传递给后台
        [urlRequest setHTTPBody:[jsonString dataUsingEncoding:enc]];
        [urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
        AFHTTPSessionManager *mgr8 = [AFHTTPSessionManager manager];
        mgr8.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/html",@"text/json",@"text/plain",@"text/text",@"text/javascript",nil];
        mgr8.requestSerializer = [AFHTTPRequestSerializer serializer];
        mgr8.responseSerializer = [AFHTTPResponseSerializer serializer];
        
        NSURLSessionDataTask *dataTask = [mgr8 dataTaskWithRequest:urlRequest completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
            
            //声明一个gbk编码类型
            NSStringEncoding gbkEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
            // 使用如下方法 将获取到的数据按照gbkEncoding的方式进行编码,结果将是正常的汉字
            NSString *zhuanHuanHouDeShuJu = [[NSString alloc] initWithData:responseObject encoding:gbkEncoding];
            NSLog(@"%@",zhuanHuanHouDeShuJu);
            //再转换成想要的json数据
            NSData *jsonData = [zhuanHuanHouDeShuJu dataUsingEncoding:NSUTF8StringEncoding];
            NSError *err;
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
                                                                options:NSJSONReadingMutableContainers
                                                                  error:&err];
            NSLog(@"最终的json数据为%@",dic);
            
        }];
        [dataTask resume];
    

    这样就解决了给Java传递gbk编码格式的json数据了

    相关文章

      网友评论

          本文标题:iOS给Java后台传递json格式的数据GBK编码格式处理

          本文链接:https://www.haomeiwen.com/subject/mnkrjctx.html