網路標準之:IANA定義的傳輸編碼

flydean發表於2022-03-14

簡介

不同的系統或者協議可以接受的資料型別是不同的,如果要在那些不支援現有資料格式的系統或者協議中進行資料傳輸的話,就需要進行資料轉換。

IANA的全稱是The Internet Assigned Numbers Authority,也叫做網際網路數字分配機構,是一個負責協調網際網路的事務讓Internet正常運作的機構。它定義了幾個transfer encodings方式。

今天將會給大家詳細講解這幾種方式的由來和使用場景。

IANA的傳輸編碼方式

根據IANA的定義,有下面幾個transfer encodings方式:

Name Reference
7bit [RFC2045]
8bit [RFC2045]
binary [RFC2045]
quoted-printable [RFC2045]
base64 [RFC2045]

這些傳輸編碼方式都是什麼意思呢?接下來一一講述。

7bit

我們知道計算機的第一個字元編碼就是ASCII編碼,它表示的範圍是從0到127。一個位元組是8位,0到127意味著ASCII編碼只使用7bits,這也就是7bit的由來。

對於有些協議或者系統來說,他們只支援ASCII編碼,如果傳輸的資料範圍超過了7bit,則會出現異常。

8bit

7bit在使用中有很大的限制,因為對於常用的Unicode編碼來說,通常會使用2-4個位元組作為資訊的載體,如果是7bit的話,就會導致資訊接收的不完整,從而失去資料原有的意義。

8bit的意思是,可以接收整個8bit的資料,也就是說資料可以按整個位元組來傳輸。這樣就沒有傳輸的限制了。所以說8bit的應用會更加廣泛,如果一個系統可以正確的接收8bit,那麼我們可以稱這個系統為8-bit clean 。

binary

是不是8bit就可以適用於所有的系統呢?我們要知道,8bit是按位元組來進行傳輸的。所以對於格式更加緊湊的二進位制流的話是不適用的。所以有一個專門的二進位制訊息格式binary來處理二進位制資訊。

quoted-printable

如果資料是binary格式的,但是系統又不支援binary格式該怎麼辦呢?

這時候我們就需要將binary轉換成為text格式,這種轉換叫做Binary-to-text encoding。其中quoted-printable和base64就是兩種轉換方式。

對於quoted-printable來說,就是將一個8-bit資料用7bit可讀的字元來表示。雖然7bit可以表示0-127的範圍,但是其中只有33 到 126是可讀字元,其他的都不是可讀字元。

那麼quoted-printable是怎麼轉換的呢?

quoted-printable中,任何 8 位位元組值都可以用 3 個字元來進行編碼。=後面接兩個16進位制的數字。

比如對於ASCII的換頁符12來說,轉換過來就是=0C。 因為=是特殊的字元,所以等號也需要轉義成=3D來表示。

對於可列印的ASCII字元,也就是33到126之間的十進位制值,則不需要轉義,直接表示他們自己即可。

ASCII 製表符和空格字元、十進位制值9和32可以由它們自己表示,除非這些字元出現在編碼行的末尾。在這種情況下,它們需要轉義為=09(製表符)或 =20(空格),或者後跟 =(軟換行符)作為編碼行的最後一個字元。

另外Quoted-Printable 編碼資料的一行不得超過76個字元。如果超出的話,可以根據需要新增軟換行符。軟換行符是由在編碼行末尾新增=組成,軟換行符不會在解碼文字中顯示為換行符。

base64

除了quoted-printable之外,還有一種常用的Binary-to-text encoding方式,叫做base64。

base64的原理是通過一個對映表,將二進位制編碼對映成為64個字元(26個小寫字母+26個大寫字母+10個數字+加號和斜槓)。

每個Base64字元可以表示6bits的資料,所以3個位元組的資料可以用6個Base64字元來表示。

其對映表如下:

總結

以上就是IANA介紹的幾種傳輸編碼格式,大家學會了嗎?

本文已收錄於 http://www.flydean.com/13-transfer-encodings/

最通俗的解讀,最深刻的乾貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!

歡迎關注我的公眾號:「程式那些事」,懂技術,更懂你!

相關文章