Base64 是一种基于 64 个可打印字符来表示二进制数据编码方式,广泛运用在处理文本数据的场合,表示、传输、存储一些二进制数据,包括 MIME 的电子邮件及 XML 的一些复杂数据。
通过 Base64 编码后的数据比原始数据略长,为原来的 4/3,原因是 Base64 是将三个字节拆分成 4 个 6bit 段进行编码。
Base64 编码的具体步骤如下
- 对于原始数据,以每 3 个 8bit 为一组,获得 24bit
- 将 24bit 划分为 4 组,每组 6bit
- 将每组 bit 的高位补充 2 个 0,获得 4 个 8bit
- 将 4 个 8bit 转换为 10 进制,对照 Base64 参照表进行编码替换
这里需要注意的点
- 对于 URL 而言,Base64 参照表的 "+" 和 "/" 是保留字,不会进行 URL 编码,这样会对解析 URL 产生错误,因此需要先将它们替换成诸如 "-_" 等字符,然后参与 URL 编码
- 由于编码的是 8bit 字符,因此对于超过 8bit 的字符,如中文字符等,需要进行 UTF8 编码后再进行 Base64 编码
- 字符串末尾有时不足 3 个字符,需要补充 "=" 进行占位,具体来说
- 对于末尾只有 1 个字符的情况,转换为 8bit 二进制数据后,末尾补 0,填充至 12bit,转换为 2 个 Base64 编码字符,然后再补充 2 个 "=" 作为结束符
- 对于末尾只有 2 个字符的情况,转换为 8bit 二进制数据后,末尾补 0,填充至 18bit,转换为 3 个 Base64 编码字符,然后再补充 1 个 "=" 作为结束符
iOS 中的 Base64 编码与解码如下所示
NSString *target = @"TEST";
NSData *data = [target dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64Str = [data base64EncodedStringWithOptions:nil];
NSString *base64DecodeStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
网友评论