我有一个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的真实价值?
答案 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: @""];