-initWithData: encoding:返回nil的解决办法
2017-06-07 14:21
375 查看
方法:-initWithData: encoding: 是将一个NSData对象转换为NSString对象。
有时候,NSData非空,该方法却返回一个nil,而不是返回一个NSString对象。
究其原因,无非是NSData中含有非UTF-8编码的字符,导致转换失败。
下面给出一个解决办法:
首先导入libiconv.tdb库
NSData转NSString示例:
有时候,NSData非空,该方法却返回一个nil,而不是返回一个NSString对象。
究其原因,无非是NSData中含有非UTF-8编码的字符,导致转换失败。
下面给出一个解决办法:
首先导入libiconv.tdb库
#import <iconv.h> static NSData *ALUTF8NSData(NSData *data) { if (!data) return nil; const char *iconv_utf8_encoding = "UTF-8"; iconv_t cd = iconv_open(iconv_utf8_encoding, iconv_utf8_encoding); // 从utf8转utf8 int one = 1; iconvctl(cd, ICONV_SET_DISCARD_ILSEQ, &one); // 丢弃不正确的字符 size_t inbytesleft, outbytesleft; inbytesleft = outbytesleft = data.length; char *inbuf = (char *)data.bytes; char *outbuf = malloc(sizeof(char) * data.length); char *outptr = outbuf; size_t icon = iconv(cd, &inbuf, &inbytesleft, &outptr, &outbytesleft); if (icon == 0) { NSData *result = [NSData dataWithBytes:outbuf length:data.length - outbytesleft]; iconv_close(cd); free(outbuf); return result; } return nil; }
NSData转NSString示例:
NSData *data = /***/; NSString *dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; if (!dataString) { // 解决NSData转化为NSString时,可能返回nil的情况 NSData *data = ALUTF8NSData(nsData); dataString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; }
相关文章推荐
- 使用MPMediaPlayerController播放视频提示[NSURL initFileURLWithPath:]: nil string parameter错误的解决办法
- Entity Framework "There is already an open DataReader associated with this 的解决办法
- EF Database First with ASP.NET MVC: Creating the Web Application and Data Models开发遇到问题的解决办法
- There is already an open DataReader associated with this Command which must be closed first的错误解决办法
- Datanode denied communication with namenode: DatanodeRegistration 解决办法
- stringWithContentsOfURL:encoding:error方法返回nil
- PHP微信公众号服务端提示Notice: Undefined index: HTTP_RAW_POST_DATA in xxxx,且无法正常返回的解决办法
- init: prefdm main process (1235) terminated with status 1解决办法
- init: prefdm main process (1235) terminated with status 1解决办法
- jQuery在异步请求数据返回后,调用$("selector").html(data.content);之后因为一些特殊字符或者',"不能显示内容的问题解决办法
- 使用SudzC生成ARC版Obj-C代码出现返回结果为nil的疑问与暂时解决办法
- iOS 之后台返回json解析出现的null的解决办法、nil、Nil、NSULL、NULL之间的区别、野指针、内存泄漏、僵尸对象
- git clone 下载速度0bytes 出现error: RPC failed; curl 18 transfer closed with outstanding read data 解决办法
- VM:CG raster data-关于SDWebImage中的decodedimagewithimage引发的内存大量消耗的解决办法
- NSBundle mainBundle] pathForResource 返回nil的解决办法
- dataWithContentsOfURL返回nil
- Can not issue data manipulation statements with executeQuery()错误解决
- 在使用ASP.NET网站管理工具出现“遇到错误。请返回上一页并重试。”的解决办法!
- XMLHttpRequest读取中文网页时返回乱码的解决办法
- 跑跑卡丁车出现 Cannot mount data files. Please reinstall this 错误的解决办法