对于- (NSString *)base64EncodedStringWithOptions:(NSDataBase64EncodingOptions)options 这个方法是我们在使用base64编码经常使用的。其中options
typedef NS_OPTIONS(NSUInteger, NSDataBase64EncodingOptions) {
NSDataBase64Encoding64CharacterLineLength = 1UL << 0, 每64个字符插入\r或\n
NSDataBase64Encoding76CharacterLineLength = 1UL << 1, 每76个字符插入\r或\n
NSDataBase64EncodingEndLineWithCarriageReturn = 1UL << 4, 插入字符为\r
NSDataBase64EncodingEndLineWithLineFeed = 1UL << 5, 插入字符为\n
}
前两个选项为是否允许插入字符,以及多少个字符长度插入,两个可以选其一或者都不选。后两个选项代表要插入的具体字符。比如我们想76个字符后插入一个\r则可以NSDataBase64Encoding76CharacterLineLength | NSDataBase64EncodingEndLineWithCarriageReturn
- (void)viewDidLoad {
[super viewDidLoad];
NSData *data = [@"哥哥给他他他不会后哥哥哥哥哥哥哥哥哥哥哥哥哥哥哥给他他" dataUsingEncoding:NSUTF8StringEncoding];
NSString *str1 = [data base64EncodedStringWithOptions: NSDataBase64Encoding76CharacterLineLength];
NSString *str2 = [data base64EncodedStringWithOptions: NSDataBase64Encoding64CharacterLineLength];
NSString *str3 = [data base64EncodedStringWithOptions: NSDataBase64Encoding76CharacterLineLength|NSDataBase64EncodingEndLineWithCarriageReturn];
NSString *str4 = [data base64EncodedStringWithOptions: NSDataBase64Encoding76CharacterLineLength|NSDataBase64EncodingEndLineWithLineFeed];
NSString *str5 = [data base64EncodedStringWithOptions: kNilOptions];
}
![](https://img.haomeiwen.com/i2457121/ad44b8af9a679a83.png)
通过以上打印可再次说明:
- NSDataBase64Encoding76CharacterLineLength 每76个字符插入\r\n
- NSDataBase64Encoding64CharacterLineLength每64个字符插入\r\n
- NSDataBase64Encoding76CharacterLineLength |64EncodingEndLineWithCarriageReturn 每76个字符插入\r
- NSDataBase64Encoding76CharacterLineLength |NSDataBase64EncodingEndLineWithLineFeed 每76个字符插入\n
- kNilOptions \r\n都不插入
小结:NSDataBase64EncodingOptions的值
仅仅决定了输出时编码的格式,加不加换行符和回车符。这样虽然不影响编码,但需要了解一下,以防和H5或安卓等对接时因为编码格式的问题造成数据解析异常,这种情况开发中是真实存在的。
网友评论