【问题标题】:NSData and NSString conversion not equalNSData 和 NSString 转换不相等
【发布时间】:2016-07-08 11:32:45
【问题描述】:

所以我从网络得到了一个 NSData 对象,比如:

现在我想看看使用编码的字符串是什么:NSASCIIStringEncoding:

[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]

我得到:

"\xc2\x93\0\0\0\x02macid\0)\0\0\02f5672cb76691b989bbd2022a5349939a2d7b952\0\x02ifa\0!\0\0\07188aa4015254d7c9abe2bbb2caee7b9\0\x02ifv\0! 0a04f5078bc804443bdcd17e6f42e980c\0\nuuid\0\0"

注意:这个字符串对我来说很有意义,因为

a04f5078bc804443bdcd17e6f42e980c

是我的设备标识符来自

[UIDevice currentDevice].identifierForVendor]

现在我想将它转换回 NSData:

[str dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]

如您所见,第一部分已更改。如何保持不变?

【问题讨论】:

    标签: objective-c nsstring nsdata


    【解决方案1】:

    0x93 超出 ASCII 范围,请使用同时考虑值的文本编码 > 0x7F 例如NSMacOSRomanStringEncoding

    【讨论】:

    • 我觉得还是字符串,因为a04f5078bc804443bdcd17e6f42e980c是我的设备标识符,所以我觉得有道理
    • 我怎么知道编码?
    • @Wingzero 如果不是关于编码的问题,那可能是你如何获得NSData 对象的问题。
    • NSData 对象中的第一个字节是 0x93,但 ASCII 只有 7 位 (0x00 - 0x7F),而没有最高有效位的 0x930x13
    • @Droppy 你为什么这么说?我对编码一无所知,但 vadian 向我解释,它确实有效。
    【解决方案2】:

    这不是一个有效的字符串(例如,它包含NUL 字符):

    @"\xc2\x93\0\0\0\x02macid\0)\0\0\02f5672cb76691b989bbd2022a5349939a2d7b952\0\x02ifa\0!\0\0\07188aa4015254d7c9abe2bbb2caee7b9\0\x02ifv\0!\0\0\0a04f5078bc804443bdcd17e6f42e980c\0\nuuid\0\0"
    

    所以很明显,数据没有使用 ASCII 编码,或者它甚至可能一开始就不是编码字符串。为了获得正确的字符串,您需要知道它的编码(例如,这通常作为来自 Web 服务器的元数据提供)。一旦知道正确的编码,就可以生成一个有效的字符串,然后从该字符串生成其他编码。

    【讨论】:

    • 我觉得还是字符串,因为a04f5078bc804443bdcd17e6f42e980c是我的设备标识符,所以我觉得有道理
    • 我怎么知道编码?
    • 仅仅因为你可以识别数据中的字符串并不意味着整个数据都是一个字符串。当字符串发送给您时,您应该被告知编码。
    • 谢谢。我不知道编码,我只是从网络中获得了 NSData 对象。问题更像是,我怎么能猜到编码
    • 不是字符串,所以没有编码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 2012-11-09
    相关资源
    最近更新 更多