NSData 转 NSString 为空的解决方法

来源:互联网 发布:域名注册检测工具 编辑:程序博客网 时间:2024/05/16 10:18

       在iOS底层网络的开发中,会遇到NSData 转 NSString 为空的情况,原因很多,下面的解决方法是针对从服务器传过来的数据中含有非UTF-8字符(主要是UTF-8)的情况。


用libiconv清除非utf8字符

先给项目Link Binaries With Library 添加libiconv.dylib


使用如下函数对NSData进行清理,再进行转换就OK了。

<span style="font-size:18px;">- (NSData *)cleanUTF8:(NSData *)data {  iconv_t cd = iconv_open("UTF-8", "UTF-8"); // 从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;  if (iconv(cd, &inbuf, &inbytesleft, &outptr, &outbytesleft)      == (size_t)-1) {    NSLog(@"this should not happen, seriously");    return nil;  }  NSData *result = [NSData dataWithBytes:outbuf length:data.length - outbytesleft];  iconv_close(cd);  free(outbuf);  return result;}</span>

原文地址:

http://m.blog.csdn.net/article/details?id=50905578;


还有另外一种方法,在我的项目中还没有使用,先记录一下地址吧:


http://blog.csdn.net/cuibo1123/article/details/40938225。


0 0