我还没有看到关于这一个的非常明确的答案。由于某种原因,我不明白,我接收数据的服务器在开始时返回一个JSON响应,其中包含很多(可能数百个)空字节。
当我使用以下代码时,字符串显示为null:
NSString* newStr = [[[NSString alloc] initWithData:dataToBeLoaded encoding:NSUTF8StringEncoding] autorelease];
这显然是一个常见问题,但我还没有看到如何将NSData转换为NSString的明确答案。
直到最近,我才看到这个问题带有一个中间的NSString值,但是在我从开头和结尾剥离了一些(但不是数百个)字符后它就消失了。剥离后的NSString非常好,所以我认为编码方法不是问题。
是否有正确执行此操作的内置方法?我必须进行成像,我会编写的代码将逐字节地传输。
顺便说一句,当我在浏览器中手动将JSON请求发送到服务器时,响应将返回完全有效的JSON,并且浏览器屏幕中不会出现明显的问题。
我应该做些什么?感谢。
答案 0 :(得分:0)
从每个服务器返回的数据包含有效的JSON(在许多情况下使用JSON Lint进行验证)。在一种情况下,返回数据是包含JSON对象的javascript赋值语句。在另一种情况下,它只是一个JSON对象。在这两种情况下,我都知道JSON对象以大括号开头。
因此,为了去除所有前导空值,我使用下面的代码。似乎有些方法将NSString中的字符串数据视为C字符串,但其他方法也知道它有更多,包括对长度的了解。幸运的是, rangeOfString 和 substringFromIndex 超越了前导空值。
NSString* newStr = [[[NSString alloc] initWithData:dataToBeLoaded encoding:NSUTF8StringEncoding] autorelease];
if (newStr == nil) return;
NSRange headRange = [newStr rangeOfString:@"{"];
NSString *stripped = [newStr substringFromIndex:headRange.location];