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
的編碼過程有一個比較清晰的認識了.