【问题标题】:convert base64 decoded NSData to NSString将 base64 解码的 NSData 转换为 NSString
【发布时间】:2012-08-03 15:40:49
【问题描述】:

我正在尝试对 base64 数据进行编码和解码。但是在解码 base64 数据时,它返回一堆十六进制值,但我无法使用 NSlog 显示或打印输出到原始可读字符串。下面的代码不能打印任何东西,只是空的。

谁能帮忙?谢谢 > >

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 );

【问题讨论】:

  • 你使用的是什么 Base64 库?
  • 您看过本文中有关 iPhone 的部分吗? cocoawithlove.com/2009/06/…
  • 显示decodeBase64WithString: 方法。
  • 在这个问题中我发布了一个NSString -> NSString 解码和编码方法:stackoverflow.com/questions/11633577/…
  • @JustinPaulson 感谢您的推荐,但在尝试打印解码时解码出错(正在反转为原始字符串)。 NSString* sampleString = @"hello habesh"; NSString* 编码 = @"aGVsbG8gaGFiZXNo"; NSLog(@"\n 编码字符串 'hello girmay' %@",[self encodeString:sampleString]); NSLog(@"\n 解码后的原始字符串 %@",[self decodeString:encoded]);

标签: objective-c ios nsstring nsdata


【解决方案1】:

NSData中有一个内置函数

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

【讨论】:

  • /* 这些方法首先出现在 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);
【解决方案2】:

如果您仍然遇到问题,请试用此库: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];

【讨论】:

    【解决方案3】:

    试试 Google 的 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

    【讨论】:

    • 干杯@orip,我得到了我想要的。 tnx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 2011-01-28
    • 2010-12-21
    相关资源
    最近更新 更多