2012-12-31 55 views
0

我将UIImage转换为NSString,编码为base64,但数据结果为空。这里是我的代码:NSData给出NULL

[Base64 initialize]; 
    NSString *imageString = [NSString stringWithFormat:@"img:%@", [Base64 encode:UIImagePNGRepresentation(shared.image)]]; 
    NSData *imageData = [NSData dataWithBase64EncodedString:imageString]; 
    [shared.outputStream write:[imageData bytes] maxLength:[imageData length]]; 

我不知道发生了什么事!如果我使用UTF-8编码,它工作得很好,但结果为空(这不是问题的一部分)。 我在做什么错?


这种背景下,这里的目的是修改此Ray Wenderlich demo因此它可以发送图片,太。

+0

这可能会有一个更相关的标题 - 它更多关于Base64,而不仅仅是NSData。 – nielsbot

回答

3

您将base64字符串加上img:作为前缀,因此使字符串无效base64。如果要测试解码字符串,请删除img:

NSString *imageString = [Base64 encode:UIImagePNGRepresentation(shared.image)]; 
//Data should not be nil anymore. 
NSData *imageData = [NSData dataWithBase64EncodedString:imageString]; 

也没有理由将其从数据转换为字符串,然后回到相同的数据。我假设你想把字符串字节写成"img:<base64 string>"

NSString *imageString = [NSString stringWithFormat:@"img:%@", [Base64 encode:UIImagePNGRepresentation(shared.image)]]; 
NSData *b64ImageData = [imageString dataUsingEncoding:NSUTF8StringEncoding]; 
[shared.outputStream write:[b64ImageData bytes] maxLength:[b64ImageData length]]; 
+0

问题是我需要img:bit,因为服务器需要它来识别它是一个图像还是一个字符串。那么,我是否也需要对img:bit进行编码? – GreatGoldApps

+0

查看更新后的答案,您不应该使用base64方法来尝试解码它,您只需要从字符串中获取字节。 – Joe

+0

@joe许多Base64实现定期插入换行符。我是否正确地认为这个不是?如果是这样,gga可能没问题。我很担心他的Python服务器检测到Base64编码字符串的末尾。我会倾向于引用它,以便他可以确认字符串的结尾。 – Rob