iOS学习-计算机的编码

2021-08-24  本文已影响0人  快乐的tomato

一、二进制

1、什么是二进制

以2为基数代表系统的二进位制。用两个不同的符号0(代表零)和1(代表一)来表示

2、计算机为什么采用二进制?

1、二进位计数制仅用两个数码,任何具有二个不同稳定状态的元件都可用来表示数的某一位,氖灯的"亮"和"熄";开关的”开“和”关“; 电压的”高“和”低“。
2、二进位计数制的四则运算规则十分简单
3、在电子计算机中采用二进制表示数可以节省设备

二、ASCII码

1、什么是ASCII码

既然电脑只能用0、1来显示,显然我们是看不懂的,怎么能让计算机传输出二进制数据显示出我们能看的字符呢?
所以早期美国就搞了一套电脑编码系统,就是ASCII码。共收录了 字符包括数字、字母、还有一些符号等128个,用一个字节(8位)就可以来表示存储。


image.png

ASCII码对照表完整版
比如用我们想别人打个招呼,Hi,在电脑传输的就是01001000 01101001,经过电脑的各种转换,就可显示出Hi。

当欧洲其他的国家,比如法国、德国也用电脑的时候,这些字符就不够用了,就对ASCII码进行了扩展,但是当电脑传到我国的时候,这些字符也没法显示汉字,就根据我们国家的情况制定了国标GB2312、GBK标准,这些标准增加了汉字等字符。

二、Unicode

1、什么是Unicode

如果每个国家都搞一套标准,那岂不是很乱,所以某一个组织就搞了一个同一的标准,就是Unicode。包含了字符集和编码规则。

三、UTF-8

1、什么是UTF-8

Unicode是UTF-8发展来的,当然这其中经历了很复杂的发展历程,这也是目前世界用的最多的。

2、在iOS中的应用
 NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

将网络请求返回的二进制数据NSData进行NSUTF8StringEncoding编码,转换成我们可以看的懂得文字。

四、base64编码

1、什么是base64编码

Base64编码是从二进制值到某些特定字符的编码,这些特定字符一共64个,所以称作Base64。

2、为什么要用base64编码

是为了准确的传输数据
浏览器里面的图片、视频、音频都是二进制数据),问题是传输的时候必须保证字节不会改变。你直接将图片的字节转化为一个字符串一般是不行的,除非使用的字符集在0~255之间全部有对应的字符,否则就会导致某些字节转换错误,那么客户端所收到的就不再是原来的那些字节了。
base64之所以可以,是因为编码之后的字符都落在ASCII区间,而ASCII是所有字符编码都会支持的,因此可以正确传输和还原。

3、base64编码原理

比如对ABC进行base64编码:

1、首先取ABC对应的ASCII码值
A : 65、B : 66、C : 67
2、再取二进制值
A : 01000001、B : 01000010、C : 01000011
3、然后把这三个字节的二进制码接起来
010000010100001001000011
再以6位为单位分成4个数据块
010000 010100 001001 000011
并在最高位填充两个0后形成4个字节的编码后的值
00010000 00010100 00001001 00000011
4、再把这4个字节数据转化成10进制数
16、20、19、3
5、最后根据Base64给出的64个基本字符表,查出对应的ASCII码字符
Q、U、J、D

所以ABC进行base64编码后的值是QUJD。
站长工具
用工具测试结果:

image.png
4、在iOS的实现
#pragma mark - 1、base64编码
-(void)base64Test{
    
    NSString *str = @"我是中国人";
    NSLog(@"原字符=%@",str);
    NSLog(@"base64编码=%@",[self base64BianMa:str]);
    NSLog(@"base64解码=%@",[self base64JieMa:[self base64BianMa:str]]);
}

-(NSString *)base64BianMa:(NSString *)str{
    
    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
    NSString *base64Str = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
    return  base64Str;
}

-(NSString *)base64JieMa:(NSString *)str{
    
  NSData *data = [[NSData alloc]initWithBase64EncodedString:str options:NSDataBase64DecodingIgnoreUnknownCharacters];
  NSString *jiemaStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
   return  jiemaStr;
}

参考:
百度百科:二进制
非常详细的字符编码讲解,ASCII、GB2312、GBK、Unicode、UTF-8等知识点都有
Base64编码

上一篇 下一篇

猜你喜欢

热点阅读