字符编码补充

字符编码

乱码:产生乱码的本质原因是存和取所采用的编码格式不一样

编码种类:ascii unicode gbk gb2312 utf-8

电脑组成:硬盘 ====》内存===》 一级缓存 二级缓存 CPU寄存器===》CPU

cpu 交互的是用户能识别的数据,字符

硬盘中最终存贮的数据:01的二进制数据(可以直接转化为电脑能识别的高低电平)

什么是字符编码:

将人识别的 字符转换成计算机能识别的01 高低电平,转换的规则就是字符编码

编码表 也就是对应关系

最早期的对应关系 ascii编码表:存放的是英文数字字符与机器二进制的对应关系

例如;数字70对应ascii 表 指向的是字母F

print(chr(70)) ------------------->>F

print(ord('F')) --------------------->>70

字节所占字节数

1字节 = 8个二进制位 00000000----111111111 256个数字 -128 ~127

00000000---1000000 拓展:原码 补码 反码

ascii中一个字母或数字占据一个字节

GBK:中文编码 最新GBK gb18030

​ 16个二进制位 15个0到15个1

​ 兼容ascii 一个字母或者数字占据一个字节

​ 2W多汉字,用两个字节进行存贮

日文/韩文 shift_JIS / Euc-kr

国际上交流:

一条信息中,可能同时出现英文 中文 日文 韩文......将所有信息存贮且不乱码

万国编码表:Unicode

uincode 采用两个字节存放数据

utf-8 Utf-16 utf-32 常用国际编码

utf-8采用变长存贮:1字节存放数字与英文,3字节存放汉字

utf-16采用定长存贮:均以2字节存放数字,英文,汉字(常用的,也就是部分的汉字,不是全部的汉字)

内存中用utf-16存取数据,定长存取数据效率高,变长还需要计算之后才能存取

cpu和硬盘中,采用utf-8存取数据,(utf-8传输更快)

拓展:现在在实际的项目过程中很多公司都采取牺牲空间 提升效率的方法,因为硬件扩展比较容易,加内存条加存贮器都容易解决,而且成本不是很高, 但是要提高程序的运算效率,改进算法,就是比较麻烦的了。

三种字符串


###原文本字符串数据
s1='abc123你好'
print(s1)

####二进制字符串数据:
#数据传输是以字节为单位,要将原字符串转换为二进制字符串才能传输
#编码
res = s1.encode('utf-8')
#解码
s2 = res.decode('gbk')


####原义字符串数据
s3 = r'你好 好的'
print(s3)

总结:

字典:

增删改查

字典循环 dic.keys() dic.values() dic.items()

字典嵌套 字典可以和列表交叉嵌套

python

!1554014084370](C:UsersDELLAppDataLocalTemp1554014084370.png)

字符编码

以后我们使用的文本文件统统采用utf-8编码

ascii----->各国自己独有的编码(例如gbk)兼容ascii----------->unicode 万国编码 兼容前面的------->utf-8 utf-16

python2默认采用ascii 编码表。

python3默认采用utf-8

再文件最上方可以通过 encoding: 编码名 来规定文件解码的编码表

再python3以后的开发环境,所有的文件采用utf-8编码存贮,python3默认也采用utf-8读取文件,所以可以省略文件头

原文地址:https://www.cnblogs.com/1832921tongjieducn/p/10649704.html