【问题标题】:NSString from NSData -- Server returns NSData with leading nullsNSData 中的 NSString -- 服务器返回带有前导空值的 NSData
【发布时间】:2011-11-17 21:15:22
【问题描述】:

我还没有看到一个非常明确的答案。出于某种我不明白的原因,我从中接收数据的服务器返回一个 JSON 响应,开头有很多(可能是数百个)空字节。

当我使用以下代码时,字符串似乎为空:

    NSString* newStr = [[[NSString alloc] initWithData:dataToBeLoaded encoding:NSUTF8StringEncoding] autorelease];

这显然是一个常见问题,但我还没有看到关于如何将 NSData 转换为 NSString 的明确答案。

直到最近,我才看到这个问题与一个中间 NSString 值有关,但在我从开头和结尾删除了少数(但不是数百个)字符后,它就消失了。剥离后的 NSString 完全没问题,所以我想编码方法不是问题。

是否有可以正确执行此操作的内置方法?我必须想象我编写的代码会更有效地逐字节处理。

顺便说一句,当我在浏览器中手动将 JSON 请求发送到服务器时,响应返回为完全有效的 JSON,浏览器屏幕上没有出现明显问题。

任何想法我应该做什么?谢谢。

【问题讨论】:

  • 为什么这应该是一个常见问题?你还在哪里见过?您是否使用 fiddler(或类似工具)检查了来自服务器的 JSON 响应是否正常? dataToBeLoaded 的内容是什么?完整的 JSON 响应还是只是 JSON 响应的一部分?请提供更多信息。
  • 再次阅读此问题后,我似乎很清楚需要修复服务器部分而不是iOS或Mac OS客户端?你能修好服务器还是别人的责任?到底使用了什么服务器技术?
  • 好吧,我不知道这在数百万程序员的世界中是否常见,但我已经看过几次了,但没有真正的答案。服务器不在我的控制之下,我从我正在使用的两台服务器上看到了这一点。我将在下面用我发现对我的应用程序有用的解决方案来回答我的问题。
  • 我简直不敢相信。您能否提供有关服务器的更多信息(它使用什么技术,它是公开的)、显示传输数据的网络跟踪、您用于访问服务器和处理答案的代码等?
  • 对不起。我无法提供服务器信息。但无论如何,这不是关于 JSON 本身的问题。这是一个关于 NSString 处理的问题。

标签: nsstring nsdata


【解决方案1】:

从每个服务器返回的数据包含有效的 JSON(在许多情况下使用 JSON Lint 进行验证)。在一种情况下,返回数据是一个包含 JSON 对象的 javascript 赋值语句。在另一种情况下,它只是一个 JSON 对象。在这两种情况下,我都知道 JSON 对象以大括号开头。

所以,为了去除所有前导空值,我使用下面的代码。似乎某些方法将 NSString 中的字符串数据视为 C 字符串,但其他方法意识到它还有更多内容,包括长度意识。幸运的是,rangeOfStringsubstringFromIndex 超越了前导空值。

NSString* newStr = [[[NSString alloc] initWithData:dataToBeLoaded encoding:NSUTF8StringEncoding] autorelease];

if (newStr == nil) return;

NSRange headRange = [newStr rangeOfString:@"{"];
NSString *stripped = [newStr substringFromIndex:headRange.location];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多