网络标准之:IANA定义的传输编码
文章目錄
- 簡介
- IANA的傳輸編碼方式
- 7bit
- 8bit
- binary
- quoted-printable
- base64
- 總結
簡介
不同的系統或者協議可以接受的數據類型是不同的,如果要在那些不支持現有數據格式的系統或者協議中進行數據傳輸的話,就需要進行數據轉換。
IANA的全稱是The Internet Assigned Numbers Authority,也叫做互聯網數字分配機構,是一個負責協調互聯網的事務讓Internet正常運作的機構。它定義了幾個transfer encodings方式。
今天將會給大家詳細講解這幾種方式的由來和使用場景。
IANA的傳輸編碼方式
根據IANA的定義,有下面幾個transfer encodings方式:
| 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/
最通俗的解讀,最深刻的干貨,最簡潔的教程,眾多你不知道的小技巧等你來發現!
歡迎關注我的公眾號:「程序那些事」,懂技術,更懂你!
總結
以上是生活随笔為你收集整理的网络标准之:IANA定义的传输编码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: netty系列之:channelHand
- 下一篇: netty系列之:netty中各不同种类