欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS 服务器返回NSData数据,解析为null

程序员文章站 2023-01-11 20:35:14
ios 服务器返回nsdata数据,解析为null,通常情况下,使用下面的方法都能接收到服务器数据都能正常解析为nsdictionary(responseobject为服务器返回的二进制数据)。...

ios 服务器返回nsdata数据,解析为null,通常情况下,使用下面的方法都能接收到服务器数据都能正常解析为nsdictionary(responseobject为服务器返回的二进制数据)。

nsdictionary * dicjson = [nsjsonserialization jsonobjectwithdata:responseobject options:nsjsonreadingmutablecontainers error:nil];

但是在一些特殊的情况下,我们会遇到responseobject有数据,但是解析为我们想要的格式的时候为null(nsdictionary,nss tring,nsarray我都尝试过结果都一样),在遇到这种的情况下,也许是服务器的编码格式和你的编码格式不一致(比如服务器用的gbk而你用的utf-8),那么就会出现这种明明有数据确解析为null的结果,可以用以下方法进行转码后解析(responseobject依旧为服务器返回的二进制数据):

//定义gbk编码格式
nsstringencoding enc = cfstringconvertencodingtonsstringencoding(kcfstringencodinggb_18030_2000);
//gbk格式接收数据并进行转换
nsstring * retstr = [[nsstring alloc]initwithdata:responseobject encoding:enc];

nsdata * jsondata = [retstr datausingencoding:enc];

nsstring * jsonstr = [[nsstring alloc]initwithdata:jsondata encoding:enc];
//将数据转为utf-8
nsdata * data = [jsonstr datausingencoding:nsutf8stringencoding];
//解析
nsdictionary * dicjson = [nsjsonserialization jsonobjectwithdata:data options:nsjsonreadingmutablecontainers error:nil];


下面再举一解析例子,base64解码

eyjlcnjknvzguioi05oswizxjyb3jnc2cioilwumhuto3o8yisinjlde1zzyi6itk1zvgxqm7e0uyzoyj9

【这个用默认utf-8编码转出来为null】

- (void)decodebase64
{

    nsstringencoding enc = cfstringconvertencodingtonsstringencoding(kcfstringencodinggb_18030_2000);

    nsdata *decodeddata = [[nsdata alloc]initwithbase64encodedstring:@"eyjlcnjvcknvzguioi05oswizxjyb3jnc2cioilwumhuto3o8yisinjlde1zzyi6itk1zvgxqm7e0uyzoyj9" options:0];

    nsstring *decodedstring = [[nsstring alloc] initwithdata:decodeddata encoding:enc];
    nslog(@"%@", decodedstring);
}