ASCII码(American Standard Code for Information Interchange, 美国信息互换标准代码) 是基于拉丁字母的一套电脑编码系统, 是现今最通用的单字节编码系统.java
ASCII码能够用来表示大小写英文字母以及部分字符和控制符, 可是中文俄语法语字符均不能表示, 因此后续出现了能够表示全球字符的utf-8用来解决此问题.编码
咱们知道在java
中, 一个char
能够认为是一个int
值, 举例: code
A-Z, a-z, 0-9
的对应关系以下:
十进制 | 对应字符 | 十进制 | 对应字符 | 十进制 | 对应字符 |
---|---|---|---|---|---|
65 | A | 97 | a | 48 | 0 |
66 | B | 98 | b | 49 | 1 |
67 | C | 99 | c | 50 | 2 |
68 | D | 100 | d | 51 | 3 |
69 | E | 101 | e | 52 | 4 |
70 | F | 102 | f | 53 | 5 |
71 | G | 103 | g | 54 | 6 |
72 | H | 104 | h | 55 | 7 |
73 | I | 105 | i | 56 | 8 |
74 | J | 106 | j | 57 | 9 |
75 | K | 107 | k | ||
76 | L | 108 | l | ||
77 | M | 109 | m | ||
78 | N | 110 | n | ||
79 | O | 111 | o | ||
80 | P | 112 | p | ||
81 | Q | 113 | q | ||
82 | R | 114 | r | ||
83 | S | 115 | s | ||
84 | T | 116 | t | ||
85 | U | 117 | u | ||
86 | V | 118 | v | ||
87 | W | 119 | w | ||
88 | X | 120 | x | ||
89 | Y | 121 | y | ||
90 | Z | 122 | z |
现有的字符集很是多, 经常使用的有 UTF-8 / GBK
等, 这里面的某些字节在某些传输渠道中不支持, 好比邮件传输就不支持上面ASCII
码中的控制字符, Base64
的建立就是为了解决此问题.orm
Base64内的64是指64个字符, 分别是 A-Z, a-z, 0-9, +, /
它们与十进制的对应关系以下:cdn
数值 | 字符 | 数值 | 字符 | 数值 | 字符 |
---|---|---|---|---|---|
0 | A | 26 | a | 52 | 0 |
1 | B | 27 | b | 53 | 1 |
2 | C | 28 | c | 54 | 2 |
3 | D | 29 | d | 55 | 3 |
4 | E | 30 | e | 56 | 4 |
5 | F | 31 | f | 57 | 5 |
6 | G | 32 | g | 58 | 6 |
7 | H | 33 | h | 59 | 7 |
8 | I | 34 | i | 60 | 8 |
9 | J | 35 | j | 61 | 9 |
10 | K | 36 | k | ||
11 | L | 37 | l | 62 | + |
12 | M | 38 | m | 63 | / |
13 | N | 39 | n | ||
14 | O | 40 | o | ||
15 | P | 41 | p | ||
16 | Q | 42 | q | ||
17 | R | 43 | r | ||
18 | S | 44 | s | ||
19 | T | 45 | t | ||
20 | U | 46 | u | ||
21 | V | 47 | v | ||
22 | W | 48 | w | ||
23 | X | 49 | x | ||
24 | Y | 50 | y | ||
25 | Z | 51 | z |
Base64有64个字符, 2^6 = 64, 因此每一个Base64编码字符能够用一个6位的二进制来表示. 这样的话若是有3个字节的二进制, 能够用4位Base64字符表示.blog
编码流程以下:utf-8
举例字符串
那若是待编码字符串的长度不是3的倍数呢? 这样的话就ASCII转化的二进制数串不能整除于6了, 也就不能编码为Base64. 这样的状况为了能够整除6编译出完整的字节数, 就须要用0补位. 若是有连续6位都是0的话, 就用=
来表示.it
举例io
相信看完这两个例子, 咱们就对Base64
的编码过程有一个比较清晰的认识了.