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

Ios 在swift/objective-c中将任意二进制数据编码/解码为字符串,ios,objective-c,swift,xcode6,Ios,Objective C,Swift,Xcode6,我需要将任意NSData对象编码/解码为String/NSString。以下是我的编码方法: var avatar64 = self.avatar.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.fromRaw(0)!); let avatarData = NSData(base64EncodedString: avatar64, options: NSDataBase64DecodingOptions.fro

我需要将任意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
为零。我做错了什么?

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

var avatar64 = self.avatar.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.fromRaw(0)!);
let avatarData = NSData(base64EncodedString: avatar64, options: NSDataBase64DecodingOptions.fromRaw(0)!);
第二步再次解码Base64字符串,以便
avatadata
包含相同的字符串 二进制数据作为原始的
self.avatar

var avatar64 = self.avatar.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.fromRaw(0)!);
let avatarData = NSData(base64EncodedString: avatar64, options: NSDataBase64DecodingOptions.fromRaw(0)!);
最后,第三步尝试从原始(二进制)数据创建字符串:

此操作失败,因为数据不是有效的UTF-8序列


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

这就是我必须开始的。。。我最终加入了它,因为它在其他地方失败了。我想我做这件事是错的。我将提出另一个问题。谢谢。嗨,我也遇到过同样的情况。我创建了一个UIImage,比如var-image:UIImage=UIImage(名为:“one12.png”)。然后我将图像转换为NSData,如var data1:NSData=UIImagePNGRepresentation(图像),现在我将NSData转换回字符串,如base64String=data1.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.fromRaw(0)!)作为字符串。现在,我将图像作为参数分配给服务器,如var params=[“username”:“json”,“password”:“iosi”,“profile_img”:base64String]作为NSDictionary。我做错了什么?请给我解释一下。@Annu你是怎么解决这个问题的。我也遇到了类似的问题。有时图像被正确地传递,有时则不正确。@Ankita抱歉,但我仍然没有实现这一点。实际上,我正试图在一个演示项目中实现这一点。我将在实施时发布答案。@Annu,谢谢您的回复。我的问题现在解决了。在请求为URLRequest.setValue(“application/x-www-form-urlencoded”,forHTTPHeaderField:“内容类型”)之前,我添加了URLRequest.setValue(“application/json”,forHTTPHeaderField:“内容类型”)URLRequest.setValue(“application/json”,forHTTPHeaderField:“Accept”)。当我们传递json数据时,我们可以像这样直接设置内容类型,而不是使用表单编码