将 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
没问题
问题来自编译器优化,编译器看到没有直接使用字符串,并通过将其删除并直接将其传递给另一个方法来优化代码。
问题的关键:你在release
scheme上运行项目
解决方案:
这是将项目切换到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)
将 JSON 数据从 NSData 转换为 NSDictionary