python中的Base64

python中的Base64

简述

Base64编码 是一种基于 64 个可打印字符来表示二进制数据的方法。目前 Base64 已经成为网络上常见的传输 8 位二进制字节代码的编码方式之一。

为什么会有 Base64 编码呢?因为有些网络传送渠道并不支持所有的字节,例如:传统的邮件只支持可见字符的传送,像 ASCII 码的控制字符就不能通过邮件传送。这样用途就受到了很大的限制。

图片的二进制流的每个字节不可能全部是可见字符,这就导致图片的二进制流无法传送。最好的解决方式就是在不改变传统协议的情况下,做一种扩展方案来支持二进制文件的传送。即把不可打印的字符也能用可打印字符来表示,问题就解决了。

编码对照表

码值 字符 码值 字符 码值 字符 码值 字符
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /

python实现编码、解码

以二进制文件图片为例:

import base64

with open(r"1.jpg", "rb") as f:
    # b64encode是编码,b64decode是解码
    base64_data = base64.b64encode(f.read())
    print(base64_data)  # 输出生成的base64码,Bytes类型
	# b'xxxxx'类型的字符串
    
# img_str = 'abcdefgh12345oK='#比如生成后的码就这么放,替换下面的base64_data即可
img_data = base64.b64decode(base64_data)
# 注意:如果是"data:image/jpg:base64,",那你保存的就要以jpg格式,如果是"data:image/png:base64,"那你保存的时候就以png格式。
with open('2.jpg', 'wb') as f:
    f.write(img_data)

bytes 与 str 的区别

  • bytes 存储字节(0-255)
  • str 存储Unicode字符(0-65535)

bytes 与 str 转换

  • strbytes
    b = s.encode('utf-8')
  • bytesstr
    s = b.decode('utf-8')

字节串的构造函数

\x 表示十六进制数字,一位十六进制表示四位二进制

  • bytes() 生成一个空的字节串 等同于 b''
  • bytes(整型可迭代对象) 用可迭代对象初始化一个字节串,不能超过255
  • bytes(整数n) 生成 n 个值为零的字节串
  • bytes(字符串, encoding='utf-8') 用字符串的转换编码生成一个字节串
a = bytes()  # b''
b = bytes([10,20,30,65,66,67])  # b'\n\x14\x1eABC'
#ASCII中 10=\n , 20= \x14,30=\x1e,65,66,67分别对应ABC,其余同理
c = bytes(range(65,65+26))  # b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
d = bytes(5)  # b'\x00\x00\x00\x00\x00'
e = bytes('hello 中国','utf-8')  
# b'hello\xe4\xb8\xad\xe5\x9b\xbd'

base64中没有出现\x,因为base64把这些字符都避开了。

26(英文大写)+26(英文小写)+10(0-9数字)+2特殊(+/) = 64

参考文献

https://www.jianshu.com/p/5bb986772ef8

https://tooltt.com/base64-table/

你可能感兴趣的:(#,python,python,后端)