ios NSData 去除占位符...

在开发中遇到这样一个问题,由于后端那边为了做匹配,在解出data时,会出现后面有...的情况

image.png

如果使用
NSString *ss = [[NSString alloc] initWithData:decodeData encoding:NSUTF8StringEncoding];
会导致整个NSString产生异常,length不能正常计算

而改成
NSString *resultStr = [[NSString alloc] initWithCString:decodeData.bytes encoding:NSUTF8StringEncoding];

所以
对于NSData转NSString,请使用initWithUTF8String或者initWithCString来代替initWithData,主要原因如果data内容中包含结束符\0不在最后时,会导致整个NSString产生异常,length不能正常计算。JSON、正则之类的操作无法进行。

-----------------------续----------------------------------
关于NSString的initWithCString里面有一个坑各个大大请注意一下,就是如果你传进去的bytes最后是没有带结束符的话,有可能创建的字符串是有问题的(不是必现,要看分配内存的地址)。

举个栗子:
上面的字符串叫A字符串,并且它的地址是从0x000010 - 0x000018,那么如果这一段内存地址后面紧跟着另外一个字符串B,内存地址是0x000019 - 0x00001F,此时B字符串最后是带结束符的,那么可能会出现当你要计算字符串A的长度的时候,内存寻址就直接从0x000010到0x00001F了,因为这中间并没有结束符,这样A字符串的长度就不对了。
如果不理解可以看下[https://blog.csdn.net/zhongxiaoming1991/article/details/9903387]
所以在调用这个方法之前,最好先做一步就是在最后附加一个结束符,so提供下面两种方法:

方法一:

NSMutableData *data = [NSMutableData dataWithBytes:jsonData.bytes length:jsonData.length + 1];
[data resetBytesInRange:NSMakeRange(jsonData.length, 1)];
NSString *str = [[NSString alloc] initWithCString:data.bytes encoding:NSUTF8StringEncoding];

方法二:

char termChar[1] = {'\0'};
NSMutableData *data = [NSMutableData dataWithBytes:jsonData.bytes length:jsonData.length];
[data appendBytes:termChar length:1];
NSString *str = [[NSString alloc] initWithCString:data.bytes encoding:NSUTF8StringEncoding];

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • iOS开发系列--网络开发 概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博、微信等,这些应用本身可...
    lichengjin阅读 9,249评论 2 7
  • 下载Zookeeper源码 下载地址 :https://github.com/apache/zookeeper 安...
    maxbin阅读 13,330评论 0 2
  • 还记得我们刚认识的时候,你总是把你的故事讲给我听,我听的很痴迷。那天我正好回家,坐在火车上凌晨两三点都是你一直在陪...
    谷森阅读 1,778评论 0 0
  • 我的家乡,在丹江口市,那里物产丰富,风景优美!我最喜欢家乡的柿子。老家门前屋后都种满了柿子树,夏天柿子树上开满了米...
    浅浅的简书阅读 1,751评论 0 0
  • 甜品总是被赋予浪漫而又温暖的色彩。我希望每一个爱吃甜品的女孩都会过的很幸福,我希望每一个请女孩吃甜品的男孩都会找到...
    大青菜123阅读 5,442评论 3 4

友情链接更多精彩内容