Objective-c NSData转NSString后为nil 的解决办法
2016-03-16 15:34
681 查看
Apple官方的文档:
解决办法:
用libiconv清除非utf8字符
先给项目Link Binaries With Library 添加libiconv.dylib
#include "iconv.h" - (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; }
相关文章推荐
- java.io.EOFException java.io.ObjectInputStream$PeekInputStream.readFully 错误
- 通过ObjectOutputStream序列化和使用ObjectInputStream反序列化
- iOS开发系列—Objective-C之Foundation框架
- makeObjectsPerformSelector用法
- android.support.v7.widget.RecyclerView$LayoutManager.canScrollVertically()’ on a null object 问题解决
- 并发编程(6)Object类对线程的操作(wait/notify/notifyAll)
- 【游戏客户端开发】 IOS开发——Swift和Objective-C交互时的一些注意点
- [Object-C] 多语言支持 繁体中文(台湾)不起作用
- object 定位 全屏 在浏览器中的问题
- Objective_C中block的使用
- 由String的内存分配了解Object和基础数据类型内存分配
- Object传入String类型和其他
- iOS NSObject
- python函数 callable(object)
- Decodes a String into an object of the specified type
- ES5 对象的扩展(Object.preventExtensions)、密封(Object.seal)和冻结(Object.freeze)
- object-c内存布局
- Objective—C语言的新魅力
- Object-C基础-01-概述
- Objective-C中,ARC下的 strong和weak指针原理解释