AFN請求數(shù)據(jù)返回NSInlineData,json解析結(jié)果為nil

一般方式解析代碼如下

?NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

解析結(jié)果dict為nil,后來打印了data的類型為NSInlineData

NSInlineData怎樣處理,網(wǎng)上搜到的方式,很多都是按照下面方法改

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

manager.responseSerializer=[AFJSONResponseSerializer new];//AFHTTPResponseSerializer換成了AFJSONResponseSerializer

manager.responseSerializer.acceptableContentTypes=[NSSetsetWithObjects:@"application/json",@"text/html",@"text/javascript",@"text/json",@"text/plain",nil];

但是改后請求直接失敗

失敗的error信息如下

Error Domain=NSCocoaErrorDomain Code=3840 "Unable to convert data to string around character 76." UserInfo={NSDebugDescription=Unable to convert data to string around character 74.}

后來查到這個問題原因一般是response的編碼問題

最終解決辦法,請求依舊如下設(shè)置

AFHTTPSessionManager *manager =?[AFHTTPResponseSerializer serializer];

manager.responseSerializer=[AFHTTPResponseSerializer ? new];

manager.responseSerializer.acceptableContentTypes=[NSSetsetWithObjects:@"application/json",@"text/html",@"text/javascript",@"text/json",@"text/plain",nil];

解析結(jié)果用如下方法

NSStringEncoding enc = kCFStringEncodingUTF8;

NSString *strdata = [[NSString alloc]initWithData:responseData encoding:enc];

解析出了最終的結(jié)果,但是strdata中的漢字亂碼,后來查看請求里header編碼格式是Content-Type?→application/json;charset=GBK

最終改為

? ? NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);

NSString *strdata = [[NSString alloc]initWithData:responseData encoding:enc];

完美解決問題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容