将 NSData 转换为 NSString 返回 nil

Posted

技术标签:

【中文标题】将 NSData 转换为 NSString 返回 nil【英文标题】:Converting NSData to NSString returns nil 【发布时间】:2014-07-02 09:15:52 【问题描述】:

我知道以前有人问过这个问题,但没有一个解决方案对我有用。我正在尝试将 NSData 对象转换为 NSString 值。我正在初始化NSString 对象,如下所示:

NSString *html = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding];

html 始终是nil。我要转换的NSData 是网站的源代码。它相当长。 This 是我正在尝试转换的“NSData”。

是导致问题的数据长度吗?我需要源代码作为字符串。我可以做些什么来解决这个问题? 到目前为止我尝试了什么:

尝试了所有编码格式,如 this 答案中所示。 尝试使用[NSString stringWithUTF8String:[urlData bytes]];

但无论我做什么都会产生相同的结果。 html 总是nil 无论我做什么。

编辑

这是调试控制台的问题。即使对象中有值,调试控制台也总是显示 nil 作为大多数对象的值。但是 NSLog 总是显示该值。

【问题讨论】:

我会查看NSData 对象。添加一些调试以检查长度并公开其一些内容。如果这些看起来没问题,那么编码是下一个嫌疑人。 你的数据编码是UTF8吗? 您确定您使用的 NSData 对象是您正在记录的对象吗?愚蠢的问题,但这是互联网,所以除非你显示,否则我必须问。 对不起,我没有得到你。我在上面的 pastebin 链接中显示了 NSData 对象。 我一开始没有看到。我会说数据看起来不错,所以这是一个奇怪的错误。 【参考方案1】:

debugger 没问题 问题来自编译器优化,编译器看到没有直接使用字符串,并通过将其删除并直接将其传递给另一个方法来优化代码。

问题的关键:你在releasescheme上运行项目

解决方案: 这是将项目切换到Debug 方案的小指南

1)点击目标,点击Edit scheme...

2) 将显示弹出窗口

3) 点击Run %Your project% 4) 打开构建配置弹出窗口 5) 选择Debug 5) 按OK 6) 你准备好了!现在你可以调试任何东西了:)

【讨论】:

嗨,我会检查一下,明天一到办公室就说。 :) 你说过..谢谢..这就是问题所在。 :) 感谢您的检查 ;)【参考方案2】:

如果您使用 ARC,并且您刚刚编写了将数据转换为字符串的代码,并且尚未编写任何实际使用该字符串的代码,那么它将立即被释放。检查这是否正在发生。例如,NSLog(@"%@", html) 显示什么?

【讨论】:

嗯,我在NSString *html = [[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding]; 的下一行使用字符串,即分配代码。我尝试在行分配(上一行)上设置断点并进入并发现即使在分配之后字符串也为零,就在下一行分配中。那绝对不可能是ARC吧?【参考方案3】:
NSAttributedString *str = [[NSAttributedString alloc] initWithData:data options:@NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]
documentAttributes:nil error:&error];

【讨论】:

即使这是返回 nil【参考方案4】:

试试这个:

 NSString *myString = [[NSString alloc] initWithData:urlData encoding:NSASCIIStringEncoding];

一般来说,从 NSData 到 NSString 的转换返回 nil 表示从服务器接收到的编码格式与用于编码的方法不匹配。

【讨论】:

这个我已经试过了。刚刚又试了。不工作。正如我所说,我尝试了所有编码类型。 那么服务器端收到的响应可能有问题。尝试使用其他响应。 我已经发布了NSData 对象以及问题。响应看起来不错。相反,这是我需要转换为字符串的响应。转换另一个响应可能有效,但肯定不会帮助我。 :)

以上是关于将 NSData 转换为 NSString 返回 nil的主要内容,如果未能解决你的问题,请参考以下文章

将 NSData 转换为 NSString 并再次转换为 NSData?

我将一些数据发送到 web 服务,它返回一些 JSON 作为 NSData。如何转换为字典?(iOS 4.3)

如何将NSString值转换为NSData?

将 JSON 数据从 NSData 转换为 NSDictionary

将 NSString 转换为 NSData 是不是会强制使用尾随字节?

将 NSData 转换为 NSString 的空结果