ASCII編碼
簡介
ASCII碼(American Standard Code for Information Interchange, 美國信息互換標準代碼) 是基於拉丁字母的一套電腦編碼系統, 是現今最通用的單字節編碼系統.
對應關係
我們知道在java
中, 一個char
可以認爲是一個int
值, 舉例:
這裏的對應關係就是基於ASCII編碼, 其中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 |
Base64編碼
意義
現有的字符集非常多, 常用的有 UTF-8 / GBK
等, 這裏面的某些字節在某些傳輸渠道中不支持, 比如郵件傳輸就不支持上面ASCII
碼中的控制字符, Base64
的創建就是爲了解決此問題.
對應關係
Base64內的64是指64個字符, 分別是 A-Z, a-z, 0-9, +, /
它們與十進制的對應關係如下:
數值 | 字符 | 數值 | 字符 | 數值 | 字符 |
---|---|---|---|---|---|
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 |
如何對ASCII碼進行Base64編解碼
Base64有64個字符, 2^6 = 64, 所以每個Base64編碼字符可以用一個6位的二進制來表示.
這樣的話如果有3個字節的二進制, 可以用4位Base64字符表示.
編碼流程如下:
- ASCII碼字符串根據ASCII碼對照表轉換爲二進制數值;
- 把二進制數值按每6位進行劃分;
- 然後6位二進制轉化爲十進制根據對照表找到Base64編碼字符.
舉例
那如果待編碼字符串的長度不是3的倍數呢? 這樣的話就ASCII轉化的二進制數串不能整除於6了, 也就不能編碼爲Base64. 這樣的情況爲了可以整除6編譯出完整的字節數, 就需要用0補位. 如果有連續6位都是0的話, 就用=
來表示.
舉例
相信看完這兩個例子, 我們就對Base64
的編碼過程有一個比較清晰的認識了.