Swift将NSData转换为String

时间:2016-08-04 21:53:02

标签: swift2

我有一个NSData:

print("DEVICE TOKEN = \(deviceToken)")

包含以下内容:

DEVICE TOKEN = <19bd2388 88adb725 996437e3 cac6b7a5 7ba9157d 71bb5c00 ebee575f 255eca47>

当我尝试使用

转换它时
String(data: deviceToken, encoding: NSUTF8StringEncoding)

我的字符串是nil ....但是当我使用以下内容时:

String(data: deviceToken, encoding: NSASCIIStringEncoding)

我明白了:

"\u{19}½#­·%d7ãÊÆ·¥{©\u{15}}q»\\\0ëîW_%^ÊG"

如何获得NSData的真实价值?

2 个答案:

答案 0 :(得分:0)

deviceToken的内容只是一系列字节。它不代表任何编码中字符串的字节布局。如何将其转换为字符串取决于您。

您可以将十六进制值连接在一起:

let str1 = deviceToken.description
            .stringByReplacingOccurrencesOfString(" ", withString: "")
            .stringByReplacingOccurrencesOfString("<", withString: "")
            .stringByReplacingOccurrencesOfString(">", withString: "")
// Result: 19bd238888adb725996437e3cac6b7a57ba9157d71bb5c00ebee575f255eca47

或者使用Base64编码(我更喜欢它,因为它可以很容易地转换回NSData

let str2 = deviceToken.base64EncodedStringWithOptions([])
// Result: Gb0jiIittyWZZDfjysa3pXupFX1xu1wA6+5XXyVeykc=

答案 1 :(得分:-2)

请尝试使用此代码,我希望这会有所帮助

夫特

let deviceTokenString = deviceToken.description.stringByReplacingOccurrencesOfString("<", withString: "").stringByReplacingOccurrencesOfString(">", withString: "").stringByReplacingOccurrencesOfString(" ", withString: "")

print(deviceTokenString)

ObjC

NSString * deviceTokenString = [[[[deviceToken description] stringByReplacingOccurrencesOfString: @"<" withString: @""] stringByReplacingOccurrencesOfString: @">" withString: @""] stringByReplacingOccurrencesOfString: @" " withString: @""];