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); }