2012-04-25 142 views
49

爲什麼我們有Base64編碼?我是一個初學者,我真的不明白爲什麼你會混淆字節到其他東西(除非它是加密)。在我閱讀的其中一本書中,當二進制傳輸不可能時,Base64編碼非常有用。例如。當我們發佈表單時,它被編碼。但爲什麼我們將字節轉換爲字母?我們不能只是將字節轉換爲字符串格式,而且兩者之間有空格?例如,00000001 00000004?或者只是0000000100000004沒有任何空間,因爲字節總是出現在一對8?Base64編碼的真正目的是什麼?

+8

因爲您只需將1個字節轉換爲8而不是3轉換爲4,就像使用base64一樣(如果內存正確地爲我服務)。帶寬是有限的。 – 2012-04-25 12:38:07

+0

你正在混淆位(8位字節)和字節,它可以以任何形式分組。 – 2012-04-25 12:47:37

回答

60

Base64是一種將二進制數據編碼爲幾乎所有計算機系統都知道的ASCII字符集的方法,以便在不丟失或修改內容本身的情況下傳輸數據。例如,郵件系統不能處理二進制數據,因爲他們期望ASCII(文本)數據。所以如果你想傳輸一個圖像或其他文件,它會因爲處理數據而被破壞。

注意:base64編碼不是一種加密方式,也不是一種壓縮數據的方式。事實上,base64編碼的數據片比原始數據片大1.333倍。只有這樣才能確保在傳輸過程中不會丟失或修改數據。

+3

根據輸入數據模4的長度,Base64編碼的數據正好比原始數據+額外的0-3個額外字符的1.333(3)倍。這是因爲每個base64編碼字符存儲6位值的信息(64個不同的字符)。 – too 2015-05-13 10:12:38

+1

前後數據仍然是二進制的。那麼爲什麼數據會丟失 – 2018-02-21 05:31:37

3

Base64是一種或多或少緊湊的傳輸方式(實際上是編碼,但其目的是傳輸)任何種類的二進制數據。

http://en.wikipedia.org/wiki/Base64

「的一般規則是選擇一組的64個字符是常見的大多數編碼,也可打印的一個子集的兩個組成部分。」

這是一個非常普遍的目的,普遍的需要是不浪費比需要更多的空間。

從歷史上看,它基於一個事實,即所有用於將字符存儲到字節中的(幾乎)所有編碼的共同子集,並且在簡單數據傳輸期間大量2^8個可能的字節存在丟失或轉換的風險例如複製粘貼電子郵件發送電子郵件接收復制粘貼序列)。

(請重新引導upvote到布賴恩的評論,我只是讓它更完整,希望更清楚)。

+0

不,這只是早,我不想充實一個完整的答案。這很好。 – 2012-04-25 13:08:32

+0

請參閱我可以使用Base64將二進制數據複製/粘貼爲文本,而不必擔心非打印字符(例如用於保存圖像數據的字符串中的數據URL)。我不明白的是人們用它來編碼純文本。像這樣* Hyper Light Drifter *將其保存數據存儲在JSON字符串中,然後將其編碼爲Base64。在保存/加載時,這是不必要的額外步驟,不會做任何有用的事情,並且需要額外的時間和空間。如果他們不能自己寫自己的保存系統,遊戲中還有多少東西被掩蓋了? – 2018-01-06 23:13:23

3

Base64是一種可以在只允許打印字符的介質上表示和傳輸二進制數據的機制。它是最受歡迎的「Base Encoding」形式,其他已知使用的是Base16和Base32。

對於需要將二進制內容附加到電子郵件(如圖像,視頻或任意二進制內容)的需求引發了對Base64的需求。由於SMTP [RFC 5321]只允許在消息中的7位US-ASCII字符,有必要使用七位ASCII字符來表示這些二元八位字節流...

希望這個答案