base64/ascii/Quoted-printable

来源:互联网 发布:耐克淘宝旗舰店 编辑:程序博客网 时间:2024/05/02 02:23

每3个byte一组,以2进制格式中的6bit为一组,分成四组,高位补0,凑成1个byte,这样就转换成了4个byte。

规则

关于这个编码的规则:
①.把3个字符变成4个字符。
②每76个字符加一个换行符。
③.最后的结束符也要处理。


原文剩余的字节根据编码规则继续单独转(1变2,2变3;不够的位数用0补全),再用=号补满4个字节。这就是为什么有些Base64编码会以一个或两个等号结束的原因,但等号最多只有两个。
如果最后剩下两个输入数据,在编码结果后加1个“=”;如果最后剩下一个输入数据,编码结果后加2个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。

转码过程例子:
3*8=4*6
内存1个字符占8位
转前: s 1 3
先转成ascii:对应 115 49 51
2进制: 01110011 00110001 00110011
6个一组(4组) 011100110011000100110011
然后才有后面的 011100 110011 000100 110011
然后计算机是8位8位的存数 6不够,自动就补两个高位0了
所有有了 高位补0
科学计算器输入 00011100 00110011 00000100 00110011
得到 28 51 4 51
查对下照表 c z E z

Table 1: The Base64 Alphabet
索引
对应字符
索引
对应字符
索引
对应字符
索引
对应字符
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.
编码里面,有几个特定限定,一些可打印字符不用编码,当然如果你按照规范编码后,也一样可以显示的!




0 0
原创粉丝点击