2012-08-06 200 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