今天在项目中用到富文本的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的区别,布布扣,bubuko.com
initwithbytes 和 stringWithUTF8String的区别
原文:http://my.oschina.net/michael1986/blog/304280