每3个byte一组,以2进制格式中的6bit为一组,分成四组,高位补0,凑成1个byte,这样就转换成了4个byte。
规则
原文剩余的字节根据编码规则继续单独转(1变2,2变3;不够的位数用0补全),再用=号补满4个字节。这就是为什么有些Base64编码会以一个或两个等号结束的原因,但等号最多只有两个。
如果最后剩下两个输入数据,在编码结果后加1个“=”;如果最后剩下一个输入数据,编码结果后加2个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。
转码过程例子:
索引
|
对应字符
|
索引
|
对应字符
|
索引
|
对应字符
|
索引
|
对应字符
|
0
|
A
|
17
|
R
|
34
|
i
|
51
|
z
|
1
|
B
|
18
|
S
|
35
|
j
|
52
|
0
|
2
|
C
|
19
|
T
|
36
|
k
|
53
|
1
|
3
|
D
|
20
|
U
|
37
|
l
|
54
|
2
|
4
|
E
|
21
|
V
|
38
|
m
|
55
|
3
|
5
|
F
|
22
|
W
|
39
|
n
|
56
|
4
|
6
|
G
|
23
|
X
|
40
|
o
|
57
|
5
|
7
|
H
|
24
|
Y
|
41
|
p
|
58
|
6
|
8
|
I
|
25
|
Z
|
42
|
q
|
59
|
7
|
9
|
J
|
26
|
a
|
43
|
r
|
60
|
8
|
10
|
K
|
27
|
b
|
44
|
s
|
61
|
9
|
11
|
L
|
28
|
c
|
45
|
t
|
62
|
+
|
12
|
M
|
29
|
d
|
46
|
u
|
63
|
/
|
13
|
N
|
30
|
e
|
47
|
v
| ||
14
|
O
|
31
|
f
|
48
|
w
| ||
15
|
P
|
32
|
g
|
49
|
x
| ||
16
|
Q
|
33
|
h
|
50
|
y
|
在电子邮件中,根据RFC822规定,每76个字符,还需要加上一个回车换行。
-----------------------------------------------------我是分割线-----------------------------------------------------
最开始老美的是7位共128个字符,后来欧洲给扩展了变成了8位;
0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符)。
任何ASCII的8位超集都可以叫做“8位版”:
比如:
Extended ASCII是IBM当年为PC扩展的8位码,码点128-255中扩展的是一些制表符,
也就是dos下经常出的古怪符号。命题中的8位主要指这种。
现在互联网上更常用的“8位ascii码”是ISO/IEC 8859-1 又叫latin-1,在网页编码等各种网络协议中使用,但不被国人熟悉。
-----------------------------------------------------我是分割线-----------------------------------------------------
Quoted-printable 可译为“可打印字符引用编码”、“使用可打印字符的编码”.
即:
1.可打印字符不转码,=必须转码=3D,行尾有意义的字符tab和space,必须转码;
2.不可打印字符,非行结束,必须换码;如果数据中包含有意义的行结束标志,必须转换为ASCII回车13
(CR) 换行10(LF)序列,既不能用原来的ASCII字符也不能用QP编码的”=”转义字符序列。
3.每76个字符必须换行,每行末尾加上软换行(soft line break). 即在每行末尾加上一个”=”, 解码时去掉;
编码里面,有几个特定限定,一些可打印字符不用编码,当然如果你按照规范编码后,也一样可以显示的!任何一个8位的字节值可编码为3个字符:一个等号”=”后跟随两个十六进制数字(0–9或A–F)表示该字节的数值.例如,ASCII码换页符(十进制值为12)可以表示为”=0C”, 等号”=”(十进制值为61)必须表示为”=3D”. 除了可打印ASCII字符与换行符以外,所有字符必须表示为这种格式.
所有可打印ASCII字符(十进制值的范围为33到126)可用ASCII字符编码来直接表示, 但是等号”=”(十进制值为61)不可以这样直接表示.ASCII的水平制表符(tab)与空格符, 十进制为9和32, 如果不出现在行尾则可以用其ASCII字符编码直接表示。如果这两个字符出现在行尾,必须QP编码表示为”=09″ (tab)或”=20″ (space).
如果数据中包含有意义的行结束标志,必须转换为ASCII回车(CR)换行(LF)序列,既不能用原来的ASCII字符也不能用QP编码的”=”转义字符序列。 相反,如果字节值13与10有其它的不是行结束的含义,它们必须QP编码为=0D与=0A.
quoted-printable编码的数据的每行长度不能超过76个字符. 为满足此要求又不改变被编码文本,在QP编码结果的每行末尾加上软换行(soft line break). 即在每行末尾加上一个”=”, 但并不会出现在解码得到的文本中.
例如:If you believe that truth=beauty, then surely mathematics is the most beautiful branch of philosophy. 编码后结果是
If you believe that truth=3Dbeauty, then surely=20= mathematics is the most beautiful branch of philosophy.