1

if ステートメントで NSString に base64 データが含まれているかどうかを確認するにはどうすればよいですか? base64 は完全にランダムな方法でデータをエンコードするため、NSString 内でフレーズを検索することはできません。代わりに、文字列の内容がデータ ファイルになるかどうかを確認する必要があります。

4

1 に答える 1

5

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's +whitespaceCharacterSet)。

このカテゴリ メソッドを使用するクラスが主に 1 つしかない場合は、このコードをそのクラスの@implementationブロックの上の .m ファイル内に配置できます。複数のクラスからそのカテゴリを使用する可能性があると思われる場合は、別の .h と .m のペアを作成して格納し (例: ) MDFoundationAdditions.hMDFoundationAdditions.mそれらのクラスにインポートできます。

使用するには:

NSString *dataString = /* assume exists */;

if ([dataString isBase64Data]) {

}
于 2012-04-25T17:33:31.067 に答える