美文网首页
2022-08-01base64编码图片转换NSData失败处理

2022-08-01base64编码图片转换NSData失败处理

作者: zxh123456 | 来源:发表于2022-08-01 10:13 被阅读0次

    起因:在做项目读取身份证图片时候接口返回base64数据,安卓转换正常,ios转换失败。
    代码: 转换结果nil

    NSData *photoData = [[NSData alloc] initWithBase64EncodedString:base64Str options:NSDataBase64DecodingIgnoreUnknownCharacters];
    

    分析:
    根据苹果文档说明base64的格式可能不合规。base64的规则是把原来规则数据8字节取出6个,然后再前面补00,形成新的8字节数据。如果最后不足6个字节呢,那么就用00补全后面,称为pad,表示为“=”,所以也是为什么base64字串后面会出现1~2个=的原因。由此可见,应该是后台传回数据时候自动去掉了pad,由于base64最终字串肯定是4的倍数,所以只要补全足够的=即可。

    /* Create an NSData from a Base-64 encoded NSString using the given options. By default, returns nil when the input is not recognized as valid Base-64.
    */
    - (nullable instancetype)initWithBase64EncodedString:(NSString *)base64String options:(NSDataBase64DecodingOptions)options API_AVAILABLE(macos(10.9), ios(7.0), watchos(2.0), tvos(9.0));
    

    处理:

    if (base64Str.length % 4 != 0) {
            length = base64Str.length + 4 - (base64Str.length % 4);
            base64Str = [base64Str stringByPaddingToLength:length withString:@"=" startingAtIndex:0];
        }
    NSData *photoData = [[NSData alloc] initWithBase64EncodedString:base64Str options:NSDataBase64DecodingIgnoreUnknownCharacters];
    

    相关文章

      网友评论

          本文标题:2022-08-01base64编码图片转换NSData失败处理

          本文链接:https://www.haomeiwen.com/subject/lyzlwrtx.html