您好,欢迎来到花图问答。
搜索
您的当前位置:首页iOS 解析 jsonp 格式数据

iOS 解析 jsonp 格式数据

来源:花图问答

今天业务中遇到了个关于网络返回数据 jsonp 格式解析的问题,记录一下。

遇到问题

一般情况下我们网络请求返回的数据都是 json 格式

{
   "result":[
        {
            "Name": "Bob",
            "Age": 32,
        },
        {
            "Name": "John",
            "Age": 20,
        },
        {
            "Name": "Henry",
            "Age": 45,
        }
    ],
   "query":"hello"
}

今天做业务遇到一个 jsonp 的格式,用抓包工具抓取的数据结果为以下这个样子, 外面多了个函数包裹。

  callback({
   "result":[
        {
            "Name": "Bob",
            "Age": 32,
        },
        {
            "Name": "John",
            "Age": 20,
        },
        {
            "Name": "Henry",
            "Age": 45,
        }
    ],
   "query":"hello"
})

在用 AFNetwording 得到返回数据后,问题来了直接打印返回数据 responseObject,显示是一串编码。


137D6B32-9846-4312-B489-6E7372325661.png

解决问题

刚开始以为是 UTF8 编码,就用了以下方法进行编码转化,结果返回的字符串仍为空,网上搜索了一下, 在 UTF-8的字符中混进了其他编码格式的字符,这样NSData转NSString的时候,就是返回nil

NSString *string = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
1E6B6DFFCCAF738B8071466DE8B0041A.png

任然没有解决问题,之后在浏览器查阅返回结果,发现返回数据是GBK 编码,并非 UTF-8编码,按照以下方法就可以得到正确的结果了

unsigned long encode = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
NSString *result = [[NSString alloc] initWithData:responseObject encoding:encode];

绕了一大圈才定位到问题,记录备用。

Copyright © 2019- huatuowenda.com 版权所有 湘ICP备2023022495号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务