2012-08-06 153 views
4

我正在尝试编码和解码base64数据。但是在解码base64数据时,它会返回一串十六进制值,但是我无法使用NSlog显示或打​​印出原始可读的字符串。下面的代码无法打印任何内容,只是空的。将base64解码NSData转换为NSString

任何人都可以帮忙吗?感谢 > >

NSString* msgEncoded = [[NSString alloc] initWithFormat:@"Q1NNKE1DTC9TTUEgUkNWL2FkbWluQHNldGVjcy5jb20gT1JHLyBUVkIvNDNkYzNlMzQwYWQ3Yzkp:"]; 
NSData* decoded = [[NSData alloc] initWithData:[self decodeBase64WithString:msgEncoded]]; 
NSString* plainString = [[NSString alloc]initWithData:decoded encoding:NSUTF8StringEncoding]; 
NSLog(@"\n Decoded string: %@ \n", plainString); 
+0

? – 8vius 2012-08-06 16:27:17

+0

您是否看过本文中讨论iPhone的部分? http://cocoawithlove.com/2009/06/base64-encoding-options-on-mac-and.html – 2012-08-06 16:37:57

+2

显示'decodeBase64WithString:'方法。 – 2012-08-06 16:40:20

回答

7

就有什么的Base64 LIB您使用一个内置功能的NSData

[data base64Encoding]; 
[data base64EncodedStringWithOptions:NSDataBase64Encoding76CharacterLineLength]; 
+1

/*这些方法首先出现在OS X 10.9和iOS 7.0的NSData.h中。它们在相同版本中被弃用,以支持NSDataBase64Encoding类别中的方法。但是,这些方法已经存在多个版本,因此它们可用于定位OS X 10.9和iOS 7.0之前版本的应用程序。 (id)initWithBase64Encoding :(NSString *)base64String NS_DEPRECATED(10_6,10_9,4_0,7_0); - (NSString *)base64Encoding NS_DEPRECATED(10_6,10_9,4_0,7_0); – Jerry 2014-01-18 00:07:54

4

如果您仍然有问题,试试这个库:https://github.com/l4u/NSData-Base64

使用它像这样:

#import "NSData+Base64.h" 

NSData *someData //load your data from a file, url or photo as needed 
NSData *file = [NSData dataWithContentsOfFile:@"mytextfile.txt"]; 
NSData *photo = UIImageJPEGRepresentation(self.photo.image,1); 

//encode it 
NSString *base64string = [photo base64EncodedString]; 
NSString *base64file = [file base64EncodedString]; 

//decode it 
NSData *back = [NSData dataFromBase64String:base64string]; 
1

试用谷歌的GTMStringEncoding类。你也需要GTMDefines.h

GTMStringEncoding *coder = [GTMStringEncoding rfc4648Base64StringEncoding]; 
NSString *encodedBase64 = [coder encodeString:@"Mary had a little lamb"]; 

// will contain the original text 
NSString *decodedText = [coder decodeString:encodedBase64]; 

为了编码NSData*NSString*和回NSData*,使用encode: + decode:方法而不是encodeString: + decodeString:

作为奖励,您会获得许多其他有用的编码,例如Base64的url-safe variant

+0

干杯@orip,我得到了我想要的。 tnx – hab 2012-08-08 12:28:01