在不知道编码类型的情况下将 NSData 转换为 NSString

Posted

技术标签:

【中文标题】在不知道编码类型的情况下将 NSData 转换为 NSString【英文标题】:Converting NSData to NSString without knowing the encoding type 【发布时间】:2016-06-14 14:52:03 【问题描述】:

免责声明:

this 上一个问题不包含有效答案。 this other 确实包含我用来转换它的技术,但没有回答我的问题。

问题:

我正在从与 string 对应的 BLE 特征中读取一些 NSData,但是我不知道它使用什么编码格式。

这是来自 Xcode 上的调试器的视图:

如何将其转换为字符串?我想提取这个值: “”

我尝试了以下没有任何意义的转换。但是 XCode 似乎可以完成这项工作。 为什么?

NSData * valueAsData = characteristic.value.mutableCopy;

NSString* newStr = [[NSString alloc] initWithData:characteristic.value encoding:NSUTF8StringEncoding];
NSString* newStr2 = [[NSString alloc] initWithData:characteristic.value encoding:NSASCIIStringEncoding];

【问题讨论】:

你确定它是一个 NSString,而且只是一个字符串(例如可以是 struct)?您是否正在尝试进行一些逆向工程?如果是,并且您正在尝试确定 char 的字符串编码,那么您可能必须尝试所有可用的编码。请注意,有一些方法可以将字符串“”转换为相应的 NSData,因此您不必重做整个过程即可到达该行。或者你想得到一个 newStr = @""" ? xcode 正在显示字节值。你可以对 NSData bytes 做同样的事情 【参考方案1】:

获取与特征关联的描述符。其中之一应该是CBUUIDCharacteristicFormatString。这将指示presentation format,它将指示特征值的数据类型。

【讨论】:

以上是关于在不知道编码类型的情况下将 NSData 转换为 NSString的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以在不将 CIImage 转换为 UIImage 或 CGImage 的情况下将 CIImage 转换为 NSData?

处理 requestAttributionDetailsWithBlock 和 NSDictionary。在不知道它到底是啥的情况下将任何类型转换为 NSString

PHP:在不知道原始字符集的情况下将任何字符串转换为 UTF-8,或者至少尝试一下

有没有办法在不知道派生类型的情况下将包含派生指针的 std::any 转换为基指针?

如何在不知道格式的情况下将字符串转换为日期?

Python:如何在不知道 DST 是不是生效的情况下将时区感知时间戳转换为 UTC