物件base64轉碼 Base64編碼轉換

2021-10-19 06:19:12 字數 2500 閱讀 9463

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個位元組...