ios - 在 swift/objective-c 中将任意二进制数据编码/解码为字符串

标签 ios objective-c swift xcode6

我需要将任意 NSData 对象编码/解码为 String/NSString。这是我的编码:

    var avatar64 = self.avatar.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.fromRaw(0)!);
    let avatarData = NSData(base64EncodedString: avatar64, options: NSDataBase64DecodingOptions.fromRaw(0)!);
    let avatar = NSString(data: avatarData, encoding: NSUTF8StringEncoding);

但是 avatar 是 nil。我做错了什么?

最佳答案

您的第一步已经在 self.avatar 中创建了一个 Base64 编码的数据字符串:

var avatar64 = self.avatar.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.fromRaw(0)!);

您的第二步再次解码 Base64 字符串,以便 avatarData 包含相同的内容 二进制数据作为您的原始 self.avatar:

let avatarData = NSData(base64EncodedString: avatar64, options: NSDataBase64DecodingOptions.fromRaw(0)!);

最后,您的第三步尝试从原始(二进制)数据创建一个字符串:

let avatar = NSString(data: avatarData, encoding: NSUTF8StringEncoding);

这失败了,因为数据不是有效的 UTF-8 序列。

简而言之:只需删除第三行和第二行。

关于ios - 在 swift/objective-c 中将任意二进制数据编码/解码为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24678704/

相关文章:

ios - PDFKit 交换注释内容

ios - 快速通过 url 方案在两个应用程序之间传递数据?

ios - 为什么我的 IBAction 会出现 "unrecognized selector"错误?

iphone - 将appdelegate数据传递给ViewController

ios - iPhone 应用程序在选择 TableViewCell 时卡住 - 间歇性地,暂停/中断后

ios - 如何将一个 ViewController 从左侧推到另一个

ios - 有什么方法可以禁用 Touch ID 提示(UIAlertview)?

ios - 无法在iOS 11上获取后台位置更新

ios - Swift Little endian 十六进制值到十进制

iphone - iOS:如何进行蓝牙通信?