首页 > 其他 > 详细

initwithbytes 和 stringWithUTF8String的区别

时间:2014-08-19 14:45:55      阅读:547      评论:0      收藏:0      [点我收藏+]

今天在项目中用到富文本的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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!