python中的编码格式

在这里插入图片描述

1- 字符集和编码

1) 初代编码 – ASCII

1- 物理机与电脑的交互:物理机中有个组件叫二极管, 可以通过电流通过二极管显示的高电平和低电平来记录信号。
2- 二极管的高电平和低电平则被计算机解读为0 和 1
3- 多个0和1拼接起来成为了二进制数据
4- 为了方便人们计算, 后来将二进制转为十进制来进行计算器操作
5- 以上就实现了第一阶段的电脑与硬件的交互
6- 随着计算机的发展, 数学计算已经不满足要求, 我们需要使用到计算机传递信息
7- 类似于摩斯密码, 人们将 0和1 相互排列,一一对应一个字符。 此时就形成了最原始的编码
8- 但是不同机构有自己独特的编码方式, 导致数据只能在系统内部使用, 机构间无法互相读取其编码
9- 为了统一编码方式ASCII出现了。
NOTE: ASCII码共编码了128个字符,由七个0或1组成。 其中编码了包括数字, 字母, 特殊字符 和一些计算机按键。实现了基本的计算机信息交互。为了保险起见当时将ASCII码扩展了一位,即8位字符拼成一个字节。 (1 byte => 8 bit)

2) 现代化编码 – GBK

0- 随着计算机的普及, 编码已经不限于字母。 更多国家的语言需要进行编码
1- 为了统一编码, 有美国推出了一套标准。ANSI
2- ANSI 即声明每个字符由 16bit (2byte)拼接而成。00000000 01111111
3- 中国的第一版编码方式 gb2312编码。(该编码收集了几千个字符进行编码)
4- 后陆续添加字符进编码,形成了后面的gbk编码。 即现在国有使用最普遍的编码方式
5- 以上标准有一个问题。就是每一个国家有自己不同的编码, 当数据在国家与国家之间传递时。编码还是会出现混乱
6- 为了解决这个问题, 国际又退出了一个新的编码方式:Unicode(万国码)。即将全球所有国家的编码全部汇总起来形成一套编码
7- 此时就忽略了一个问题, 内存问题。如果将全球的编码全部收集此时16byte已经不够用了。 此时需要使用32byte去进行编码汇总
8- 那么使用unicode编码,原本1mb的文件会变成4mb。大大增加了文件传输对资源的消耗

3) 优化后的编码 – UTF

为了解决unicode编码浪费资源的问题, 国际又推出了一个新的编码 – utf(一种可变长度的编码方式, 方便数据的传输与存储)
utf编码中比较常用的为 utf-8(最短的字节长度为8)。(英文: 8bit; 欧洲文字:16bit; 中文:24bit)

总结:utf-8为国际编码方式;而gbk为国内编码;所以两者之间无法直接转化

# 1- 编码
str1 = "中文字符"
res1 = str1.encode('gbk')      # 使用 gbk 进行编码
print(res1)     # b'\xd6\xd0\xce\xc4\xd7\xd6\xb7\xfb'

res2 = str1.encode("utf-8")
print(res2)     # b'\xe4\xb8\xad\xe6\x96\x87\xe5\xad\x97\xe7\xac\xa6'

# 2- 解码
byte_str = b'\xe4\xb8\xad\xe6\x96\x87\xe5\xad\x97\xe7\xac\xa6'
res_str1 = byte_str.decode('utf-8')
print(res_str1)     # 中文字符

res_str2 = byte_str.decode('gbk')
print(res_str2)     # UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 2: illegal multibyte sequence
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值