1 為什麼mime要有編碼轉換
在mime總結這篇經驗中,總結了mime相較於rfc 822的擴充套件功能,其中提到了rfc 822的缺陷:非英語字元都不能在電子郵件中使用;2)電子郵件中不能插入二進位制檔案(如);3)電子郵件不能有附件。
能夠對文字進行簡單的加密
2 quoted-printable編碼方式
它主要用於acsii文字中夾雜少量非ascii碼字元的情況,不適合於轉換純二進位制檔案。
它規定將每乙個8位的位元組,轉換為3個字元。第乙個字元是"="號,這是固定不變的。後面二個字元是二個十六進製制數,分別代表了這個位元組前四位和後四位的數值。
這裡舉兩個例子
例如1,ascii碼中"換頁鍵"(form feed)是12,二進位制形式是00001100,寫成十六進製制就是0c,因此它的編碼值為"=0c"。
例如2,"="號的ascii值是61,二進位制形式是00111101,因為它的編碼值是"=3d"。
除了可列印的ascii碼以外,所有其他字元都必須用這種方式進行轉換。所有可列印的ascii碼字元(十進位制值從33到126)都保持原樣不變,"="(十進位制值61)除外。
3 base64
所謂base64,就是說選出64個字元----小寫字母a-z、大寫字母a-z、數字0-9、符號"+"、"/"(再加上作為墊字的"=",實際上是65個字元)----作為乙個基本字符集。然後,其他所有符號都轉換成這個字符集中的字元。
具體轉換方式如下所示:第一步,將每三個位元組作為一組,一共是24個二進位制位。
第二步,將這24個二進位制位分為四組,每個組有6個二進位制位。
第三步,在每組前面加兩個00,擴充套件成32個二進位制位,即四個位元組。
第四步,根據下表,得到擴充套件後的每個位元組的對應符號,這就是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
顯然擴充套件後每個位元組的前兩位都是00,所以範圍就是00000000-00111111,即就是1到63.
因為,base64將三個位元組轉化成四個位元組,因此base64編碼後的文字,會比原文本大出三分之一左右。
3.1 舉例1
演示英語單詞man如何轉成base64編碼第一步,"m"、"a"、"n"的ascii值分別是77、97、110,對應的二進位制值是01001101、01100001、01101110,將它們連成乙個24位的二進位制字串010011010110000101101110。
第二步,將這個24位的二進位制字串分成4組,每組6個二進位制位:010011、010110、000101、101110。
第三步,在每組前面加兩個00,擴充套件成32個二進位制位,即四個位元組:00010011、00010110、00000101、00101110。它們的十進位制值分別是19、22、5、46。
第四步,根據上表,得到每個值對應base64編碼,即t、w、f、u。
3.2 舉例2
再舉乙個中文的例子,漢字"嚴"如何轉化成base64編碼?這裡需要注意,漢字本身可以有多種編碼,比如gb2312、utf-8、gbk等等,每一種編碼的base64對應值都不一樣。下面的例子以utf-8為例。
首先,"嚴"的utf-8編碼為e4b8a5,寫成二進位制就是三位元組的"11100100 10111000 10100101"。
將這個24位的二進位制字串,按照第3節中的規則,轉換成四組一共32位的二進位制值"00111001 00001011 00100010 00100101",相應的十進位制數為57、11、34、37,它們對應的base64值就為5、l、i、l。所以,漢字"嚴"(utf-8編碼)的base64值就是5lil。
3.3 mime編碼轉換與其他編碼(例如unicode)的區別?
總結一下呢,有以下不同
3.3.1 處理物件不同
在字元編碼總結裡面總結了編碼的作用,編碼是為了完成 字元----->字元碼----->位元組流 這個過程,例如ascii將字元文字轉換成0x00到0x7f
而mime中的編碼轉換是完成 位元組流a----->位元組流b 的轉換
3.3.2 作用不同
編碼是為了計算機能夠處理文字,而mime中的編碼轉換是是為了滿足電子郵件中不能直接使用非ascii碼字元的規定,所以進行了這個轉換工作
base64轉碼 解碼
最近有業務需要使用base64轉碼,現在整理一下 window.btoawindow.atob示例window.btoa test d zda window.atob d zda test如果字串中包含中文,直接使用btoa會報錯,可以先使用encodeuricomponent進行編碼 window...
Linux下Base64轉碼解碼
編碼 echo n ceshi1111 base64 輸出 y2vzagkxmtex 解碼 echo n y2vzagkxmtex base64 d 輸出 ceshi1111 附 base64命令說明 使用 base64 編碼 解碼檔案或標準輸入輸出。w,在指定的字元數後自動換行 預設為76 0 為...
Base64轉換原理
base64是網路上最常見的用於傳輸8bit位元組碼的編碼方式之一,base64就是一種基於64個可列印字元來表示二進位制資料的方法。採用a z a z 0 9 再加乙個 做為補充符號,總共65個可顯示字元。從原來的24位變成32位 base64轉換後的字元長度比原來大三分之一左右 1 每3個位元組...