iOS 图片base64编码及UrlEncode

需求:最近项目其中一需求为将身份证照片与拍摄人像压缩后转base64再UrlEncode上传服务器进行比对,两者方法网上比比皆是,但还是遇到了久违的坑。

Base64:
    //UIImage图片转Base64字符串:

    UIImage *originImage = [UIImage imageNamed:@"xiaoming.png"];
    
    NSData *imgData = UIImageJPEGRepresentation(originImage, 1.0f);
    
    NSString *encodedImageStr = [imgData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

    //Base64字符串转UIImage图片:

    NSData *decodedImageData = [[NSData alloc]initWithBase64EncodedString:encodedImageStr options:NSDataBase64DecodingIgnoreUnknownCharacters];
    
    UIImage *decodedImage = [UIImage imageWithData:decodedImageData];

UrlEncode & UrlDecode
/**
 *  URLEncode
 */
- (NSString *)urlEncodeStr:(NSString *)input{
    NSString *charactersToEscape = @"?!@#$^&%*+,:;='\"`<>()[]{}/\\| ";
    NSCharacterSet *allowedCharacters = [[NSCharacterSet characterSetWithCharactersInString:charactersToEscape] invertedSet];
    NSString *upSign = [input stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters];
    return upSign;
}

/**
 *  URLDecode
 */
-(NSString *)URLDecodedStringWithEncodedStr:(NSString *)encodedString{
    NSString *decodedString  = (__bridge_transfer NSString *)CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,(__bridge CFStringRef)encodedString,CFSTR(""),CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
    return decodedString;
}

这两部分代码网上分享很多,也很成熟,但就是这样默认使用的代码出现问题。

问题:

UrlEncode字符串上传华为服务器后无法进行识别通过认证,期间通过修改更换各种压缩方法,设置图片压缩比率都无法通过。但是转换过的base64和UrlEncode编码都可以在网页进行图片还原

问题解决:

问题出现在这个官方Base64编码上:


image.png

NSDataBase64EncodingOptions 这个枚举中包含如下:

iOS 图片base64编码及UrlEncode_第1张图片
image.png

百度到的方法默认大多数都是使用:

 [imgData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
或者
 [imgData base64EncodedStringWithOptions:0];

解决:

服务器之所以不能比对成功是其不能读到这种默认发送的Base64编码,当然大部分使用默认的服务器识别不会出现问题。最终在 Stack Overflow(需拆墙)找到了解决办法是使用如下两个可以识别:

image.png

如再遇到默认NSDataBase64Encoding64CharacterLineLength不能识别问题,可以挨个尝试一下

UrlEncode转换:http://tool.chinaz.com/tools/urlencode.aspx
Base64图片转换:http://imgbase64.duoshitong.com/

你可能感兴趣的:(iOS 图片base64编码及UrlEncode)