【问题标题】:Checking if an NSString contains base64 data检查 NSString 是否包含 base64 数据
【发布时间】:2012-04-25 16:48:43
【问题描述】:

如何检查 NSString 是否在 if 语句中包含 base64 数据?因为 base64 以完全随机的方式对数据进行编码,所以我无法在 NSString 中搜索短语,因此我需要检查字符串的内容是否会生成数据文件。

【问题讨论】:

  • 检查字符串是否为 base64 编码 stackoverflow.com/questions/8571501/… 看起来很有希望。
  • 您无法检查,具有 100% 的可靠性。你所能做的就是看看它是否可能是base64。 (这是一个糟糕的设计,您不会从其他来源知道数据是否为 ​​base64。)

标签: iphone objective-c ios base64 nsdata


【解决方案1】:

这是我创建的 NSString 上的一个类别,它应该可以工作:

@interface NSString (MDBase64Additions)
- (BOOL)isBase64Data;
@end

@implementation NSString (MDBase64Additions)

- (BOOL)isBase64Data {
    if ([self length] % 4 == 0) {
        static NSCharacterSet *invertedBase64CharacterSet = nil;
        if (invertedBase64CharacterSet == nil) {
            invertedBase64CharacterSet = [[[NSCharacterSet
               characterSetWithCharactersInString:
        @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="]
                                     invertedSet] retain];
        }
        return [self rangeOfCharacterFromSet:invertedBase64CharacterSet
           options:NSLiteralSearch].location == NSNotFound;
    }
    return NO;
}

@end

如果您希望数据中有换行符或空格,您可以更新此方法以首先删除它们(可能是NSCharacterSet+whitespaceCharacterSet)。

如果主要只有一个类使用此类别方法,则可以将此代码放在该类的 @implementation 块上方的 .m 文件中。如果您认为您可能想从多个类中使用该类别,您可以创建一个单独的 .h 和 .m 对来包含它(例如 MDFoundationAdditions.hMDFoundationAdditions.m),然后将其导入这些类中。

使用方法:

NSString *dataString = /* assume exists */;

if ([dataString isBase64Data]) {

}

【讨论】:

  • 感谢您。我会创建一个包含第一位代码的 .m 文件然后导入它吗?
  • 这对我不起作用,BOOL result1 = [self isBase64Data:@"Rayan"]; BOOL result2 = [self isBase64Data:@"Khan"];结果 1 返回 NO,结果 2 返回 YES。
猜你喜欢
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
  • 1970-01-01
  • 2011-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多