简体   繁体   English

来自NSData的NSString为零

[英]NSString from NSData is nil

I try to get an NSString from NSData but I get a nil value. 我尝试从NSData获取NSString,但得到的值为零。 This is my code: 这是我的代码:

NSString *dataString = [[NSString alloc] initWithData:self.message.data encoding:NSUTF8StringEncoding];

When I log self.message.data I get: 当我记录self.message.data我得到:

Printing description of self->_message->_data:
<OS_dispatch_data: data[0x17e48290] = { leaf, size = 331233, buf = 0x3aac000 }>

That means my data is not nil… 这意味着我的数据不是零……

Can anyone help? 有人可以帮忙吗?

As answer to your question in comments: OS_dispatch_data is dispatch_data_t which has toll-free bridging with NSData on iOS 7 and Mavericks. 在评论中回答您的问题: OS_dispatch_datadispatch_data_t ,它具有与iOS 7和Mavericks上的NSData的免费桥接。 You can simply cast it to NSData * . 您只需将其转换为NSData *

So, in your case you can write: 因此,您可以编写以下代码:

NSData *dataCast = self.message.data;
NSString *dataString = [[NSString alloc] initWithData:dataCast encoding:NSUTF8StringEncoding];

And now you get the correct string! 现在,您将获得正确的字符串!

In my case it appeared, when AFNetworking cast internal NSMutableData to NSData . 就我而言,它出现在AFNetworking将内部NSMutableData AFNetworking转换为NSData

And this simple cast helps me. 这个简单的演员表对我有帮助。


UPD: As @Daij-Djan mentioned: If it's not works - try to check your text encoding. UPD:正如@ Daij-Djan提到的:如果不起作用-尝试检查您的文本编码。

For example if you're yousing NSURLSessionTask : 例如,如果您正在使用NSURLSessionTask

NSURLSessionTask *task; // Your NSURLSessionTask
NSString *encoding = [[task response] textEncodingName];

In your case ( NSUTF8StringEncoding ) it should be "utf-8" . 在您的情况下( NSUTF8StringEncoding ),应该为“ utf-8”

Try UTF-16 encoding instead. 请尝试使用UTF-16编码。 It may be an error converting to UTF-8 if any data in there is not recognized. 如果其中的任何数据均未被识别,则转换为UTF-8可能是一个错误。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM