initwithbytes 和 stringWithUTF8String的区别

今天在项目中用到富文本的link问题时,用到了CXAHyperlinkLabel。但是在文本内容是中文时发现会崩溃,最终定位到是在HtmlParser解析时,在_characters里面获取对应的字符串是崩溃的。

NSString *string = [NSString stringWithUTF8String:(char *)ch];


返回的string居然为空,也就是转换出了错。一开始以为是编码的问题,但后来发现要是把

[NSString stringWithUTF8String:(char *)ch];
换为:
[[NSString alloc] initWithBytes:ch length:len encoding:NSUTF8StringEncoding]

就没问题了,甚是奇怪,那么这个两个方法到底有什么区别呢?在网上找到了类似问题的答案

+stringWithUTF8String: will assume that its input is a NUL-terminated string, 
but NSData doesn't put any particular terminator there. 
Instead,create your string using -initWithBytes:length:encoding: since you know the length of the data.

这是在获取网络数据data时会遇到的问题。

stringWithUTF8String 他假设的输入流是个以Nul 结束的字符串。
在字符串结尾系统自动加上的‘\0’,以让系统识别出一个字符串的结尾。

所以,对于流式的数据还是不要用stringWithUTF8String了。

你可能感兴趣的:(initwithbytes 和 stringWithUTF8String的区别)