对象base64转码_Base64编码转换
1 為什么MIME要有編碼轉(zhuǎn)換
在MIME總結(jié)這篇經(jīng)驗中,總結(jié)了MIME相較于RFC 822的擴展功能,其中提到了RFC 822的缺陷:非英語字符都不能在電子郵件中使用;2)電子郵件中不能插入二進制文件(如圖片);3)電子郵件不能有附件。
因此出現(xiàn)了編碼轉(zhuǎn)換,目的是為了滿足電子郵件中不能直接使用非ASCII碼字符的規(guī)定,同時可以做到:所有的二進制文件,都可以因此轉(zhuǎn)化為可打印的文本編碼,使用文本軟件進行編輯
能夠?qū)ξ谋具M行簡單的加密
2 Quoted-printable編碼方式
它主要用于ACSII文本中夾雜少量非ASCII碼字符的情況,不適合于轉(zhuǎn)換純二進制文件。
它規(guī)定將每一個8位的字節(jié),轉(zhuǎn)換為3個字符。第一個字符是"="號,這是固定不變的。后面二個字符是二個十六進制數(shù),分別代表了這個字節(jié)前四位和后四位的數(shù)值。
這里舉兩個例子
例如1,ASCII碼中"換頁鍵"(form feed)是12,二進制形式是00001100,寫成十六進制就是0C,因此它的編碼值為"=0C"。
例如2,"="號的ASCII值是61,二進制形式是00111101,因為它的編碼值是"=3D"。
除了可打印的ASCII碼以外,所有其他字符都必須用這種方式進行轉(zhuǎn)換。所有可打印的ASCII碼字符(十進制值從33到126)都保持原樣不變,"="(十進制值61)除外。
3 Base64
所謂Base64,就是說選出64個字符----小寫字母a-z、大寫字母A-Z、數(shù)字0-9、符號"+"、"/"(再加上作為墊字的"=",實際上是65個字符)----作為一個基本字符集。然后,其他所有符號都轉(zhuǎn)換成這個字符集中的字符。
具體轉(zhuǎn)換方式如下所示:第一步,將每三個字節(jié)作為一組,一共是24個二進制位。
第二步,將這24個二進制位分為四組,每個組有6個二進制位。
第三步,在每組前面加兩個00,擴展成32個二進制位,即四個字節(jié)。
第四步,根據(jù)下表,得到擴展后的每個字節(jié)的對應(yīng)符號,這就是Base64的編碼值。
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
顯然擴展后每個字節(jié)的前兩位都是00,所以范圍就是00000000-00111111,即就是1到63.
因為,Base64將三個字節(jié)轉(zhuǎn)化成四個字節(jié),因此Base64編碼后的文本,會比原文本大出三分之一左右。
3.1 舉例1
演示英語單詞Man如何轉(zhuǎn)成Base64編碼第一步,"M"、"a"、"n"的ASCII值分別是77、97、110,對應(yīng)的二進制值是01001101、01100001、01101110,將它們連成一個24位的二進制字符串010011010110000101101110。
第二步,將這個24位的二進制字符串分成4組,每組6個二進制位:010011、010110、000101、101110。
第三步,在每組前面加兩個00,擴展成32個二進制位,即四個字節(jié):00010011、00010110、00000101、00101110。它們的十進制值分別是19、22、5、46。
第四步,根據(jù)上表,得到每個值對應(yīng)Base64編碼,即T、W、F、u。
3.2 舉例2
再舉一個中文的例子,漢字"嚴"如何轉(zhuǎn)化成Base64編碼?這里需要注意,漢字本身可以有多種編碼,比如gb2312、utf-8、gbk等等,每一種編碼的Base64對應(yīng)值都不一樣。下面的例子以utf-8為例。
首先,"嚴"的utf-8編碼為E4B8A5,寫成二進制就是三字節(jié)的"11100100 10111000 10100101"。
將這個24位的二進制字符串,按照第3節(jié)中的規(guī)則,轉(zhuǎn)換成四組一共32位的二進制值"00111001 00001011 00100010 00100101",相應(yīng)的十進制數(shù)為57、11、34、37,它們對應(yīng)的Base64值就為5、L、i、l。所以,漢字"嚴"(utf-8編碼)的Base64值就是5Lil。
3.3 MIME編碼轉(zhuǎn)換與其他編碼(例如unicode)的區(qū)別?
總結(jié)一下呢,有以下不同
3.3.1 處理對象不同
在字符編碼總結(jié)里面總結(jié)了編碼的作用,編碼是為了完成 字符----->字符碼----->字節(jié)流 這個過程,例如ASCII將字符文本轉(zhuǎn)換成0x00到0x7F
而MIME中的編碼轉(zhuǎn)換是完成 字節(jié)流A----->字節(jié)流B 的轉(zhuǎn)換
3.3.2 作用不同
編碼是為了計算機能夠處理文本,而MIME中的編碼轉(zhuǎn)換是是為了滿足電子郵件中不能直接使用非ASCII碼字符的規(guī)定,所以進行了這個轉(zhuǎn)換工作
總結(jié)
以上是生活随笔為你收集整理的对象base64转码_Base64编码转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多个工作表合并到一个工作表
- 下一篇: 狗熊吃包谷