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];

具体的解决 UTF-8 字符掺杂其他编码格式的过程可以参看这篇文章, 回到问题上来,我按照文章的方法处理之后的结果如图:

1E6B6DFFCCAF738B8071466DE8B0041A.png

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

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

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

你可能感兴趣的:(iOS 解析 jsonp 格式数据)