關於base64編碼的一些理解
阿新 • • 發佈:2019-02-12
就最根本的作用來說,把base64編碼解碼看做一個黑盒,那只有對byte[]型別的資料而言,是無失真的,也就是byte[]編碼後得到的,解碼後就是原來的byte[]。而本質上其他型別的資料string 還是file等,也都是轉byte[]才進行編碼。問題在於解碼的時候,由於編碼後的內容是碼錶中的下列字元,解碼時應該無論哪種編碼格式都是能轉換原來的編碼入參byte[],是不失真的(因為下列字元byte[] string互轉看上去是不受編碼格式影響的,其他字元則會可能失真),而得到這個原始bye[]後怎麼轉回原來的String 或file,這個時候就得注意了,舉個例子,如果byte[] bytes = "測試".getbyte("utf-8"); byte[] encode = base64.encode(bytes); byte[] decode = base64.decode(encode); 這個時候一般bytes是等於decode,而怎麼讓decode轉為"測試"呢,則必須decode 以utf-8的格式來轉。其他情況類似。備忘於此。
Base64編碼表
碼值 | 字元 | 碼值 | 字元 | 碼值 | 字元 | 碼值 | 字元 |
---|---|---|---|---|---|---|---|
0 | A | 16 | Q | 32 | g | 48 | w |
1 | B | 17 | R | 33 | h | 49 | x |
2 | C | 18 | S | 34 | i | 50 | y |
3 | D | 19 | T | 35 | j | 51 | z |
4 | E | 20 | U | 36 | k | 52 | 0 |
5 | F | 21 | V | 37 | l | 53 | 1 |
6 | G | 22 | W | 38 | m | 54 | 2 |
7 | H | 23 | X | 39 | n | 55 | 3 |
8 | I | 24 | Y | 40 | o | 56 | 4 |
9 | J | 25 | Z | 41 | p | 57 | 5 |
10 | K | 26 | a | 42 | q | 58 | 6 |
11 | L | 27 | b | 43 | r | 59 | 7 |
12 | M | 28 | c | 44 | s | 60 | 8 |
13 | N | 29 | d | 45 | t | 61 | 9 |
14 | O | 30 | e | 46 | u | 62 | + |
15 | P | 31 | f | 47 | v | 63 | / |