python编码说明_python说明编码和解解码

python说明编码和解解码

(一)术语

编码:把人类易读符号转为计算机易读的二进制的操作。

如,按照ASCII码表,将a转为二进制0110 0001 (十进制:97。16进制:\x61)。

按照base64码表,将a转为二进制01 1010 (十进制:26)。

解码:把计算机易读的二进制转为人类易读符号的操作。

如,按照ASCII码表,将0110 0001 转成符号为 a。

按照base64码表,将01 1010 转成符号为 a。

编码表:编码和解码之间的正确映射关系,成为编码表。编码表包括字符集(即符号)、数字代码(即序号)。

ASCII码表:

美国符号表。

GB系列码表:

中国符号表,兼容美国符号。

JP系列码表:

日本符号表,兼容美国符号。

UTF系列码表:

万国码符号表,兼容地球所有符号。

ASCII码表规则特点:

容纳了美国的符号。

1个字节(8个bit位)表示一个符号,最大0111 1111 (0-127),最多表示128个符号(打印+非打印符号)

GB系列码表规则特点:

容纳了中国符号、美国符号。

1-2个字节表示一个符号。

当1个字节(8个bit位)的最高位为0时,1个字节表示一个符号。此规则是在兼容ASCII码表。

当1个字节(8个bit位)的最高位为1时,2个这样的字节表示一个符号。此规则用于表示汉字(中国的符号)。

UTF系列码表规则特点:

容纳了全世界的所有符号。

utf-32,4个字节(32个bit位)表示一个符号。

utf-16,2个字节(16个bit位)表示一个符号。

utf-8,可变字节。1、2、3个字节表示一个符号的情况都有。

常见编码参考:https://www.cnblogs.com/andy9468/p/7465489.html

base64编码表

对二进制数据序列,如01010.....11000,每3个字节分成4组(1组6个bit位,共24个bit位,不足后面补0),再按照base64码表进行编码,不足3个字节的补上=等号。

base64详细编码参考:https://www.cnblogs.com/qi-yuan-008/p/12940018.html

延伸:

键盘输入到屏幕显示,背后的数字转换。

A键 => 30 => 65 => 97 => a

A键:压下A键,对应一次mark。mark的理解:http://blog.sina.com.cn/s/blog_1511e79950102x2b0.html

30:键盘扫描码为30

65:键盘驱动程序软件识别30对应虚拟键码为65(A)

97:键盘驱动程序软件没有识别到shift压下的事件,将虚拟键标记为ASCII码的字符‘a’(即为97)

详细击键过程:https://www.iteye.com/blog/hu-jiacheng-1508028

虚拟键键码参考:https://blog.csdn.net/sunlylorn/article/details/6456269

(二)python说明代码

# 1、转成2进制

# (1)字符编码为二进制流

print("(1)字符编码为二进制流")

str1 = ‘SE‘

str1_bytes = str1.encode(‘utf-8‘) # 按utf-8编码,返回二进制流

print(type(str1_bytes))

print(str1_bytes)

# (2)查看二进制字符串

print("(2)查看二进制字符串")

# 遍历单个字符的字节流。注意,从字节流中取出一个元素就是一个字节(8个bit位),该元素的类型是int。

for one_byte in str1_bytes:

# print(type(one_byte))

binary_str = bin(one_byte) # 将一个整数(值在0-255之间)转为二进制字串表示。

# print(type(binary_str))

print(binary_str)

# (3)从文件中读取二进制

print("(3)从文件中读取二进制")

pic = "55.png"

with open(pic, ‘rb‘) as f:

pic_content = f.read()

print(type(pic_content))

print(pic_content)

pass

# (4) 转成二进制字串

# 内置函数bin、oct、hex实现10进制转换2、8、16进制

print("(4) 转成二进制字串:(10进制的)3转二进制‘0b11‘")

binary_str = bin(3) # (10进制的)3转二进制‘0b11‘

print(binary_str)

# 2、转成8进制

# oct(9) # (10进制的)9转8进制‘0o11‘

print("(10进制的)9转8进制‘0o11‘")

binary_str = oct(9) # (10进制的)3转8进制‘0o11‘

print(binary_str)

# 3、转成16进制

# (10进制的)17转二进制‘0x11‘

print("(10进制的)17转16进制‘0x11‘")

binary_str = hex(17) # (10进制的)3转16进制‘0x11‘

print(binary_str)

# 4、转成字节流

# str1.encode()

# 5、转成字符串

# bin1.decode()

# 6、将图片二进制按照base64编码

import base64

print(‘将图片二进制按照base64编码‘)

pic = "55.png"

with open(pic, ‘rb‘) as f:

pic_content = f.read() # 读取图片文件的二进制数据

print(type(pic_content))

print(pic_content) # 图片原始二进制

# 将图片二进制按照base64编码。最终是以ASCII码的二进制存储数据。逆向时,先用按照ASCII码表转为符号,再拿着符号按照base64码表转为二进制。

base64_data = base64.b64encode(pic_content)

print(base64_data) # 图片按照base64转码后的二进制。

# 将二进制按照utf-8(兼容了ASCII码表)转为字符串。

s = base64_data.decode()

print(‘data:image/png;base64,%s‘ % s)

pass

# 7、按utf-8编码和解码

print("按utf-8编码和解码")

str1 = ‘SE‘

str1_bytes = str1.encode(‘utf-8‘) # 按utf-8编码

print(str1)

print(str1_bytes)

# print(str1_bytes.decode(‘utf-8‘)) # 按utf-8解码

# 遍历单个字符的字节流。注意,从字节流中取出一个元素就是一个字节(8个bit位),该元素的类型是int。

for one_byte in str1_bytes:

# print(type(one_byte))

binary_str = bin(one_byte)

# print(type(binary_str))

print(binary_str)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值