网络标准之:IANA定义的传输编码
文章目錄
- 簡介
- IANA的傳輸編碼方式
- 7bit
- 8bit
- binary
- quoted-printable
- base64
- 總結(jié)
簡介
不同的系統(tǒng)或者協(xié)議可以接受的數(shù)據(jù)類型是不同的,如果要在那些不支持現(xiàn)有數(shù)據(jù)格式的系統(tǒng)或者協(xié)議中進行數(shù)據(jù)傳輸?shù)脑?#xff0c;就需要進行數(shù)據(jù)轉(zhuǎn)換。
IANA的全稱是The Internet Assigned Numbers Authority,也叫做互聯(lián)網(wǎng)數(shù)字分配機構(gòu),是一個負(fù)責(zé)協(xié)調(diào)互聯(lián)網(wǎng)的事務(wù)讓Internet正常運作的機構(gòu)。它定義了幾個transfer encodings方式。
今天將會給大家詳細(xì)講解這幾種方式的由來和使用場景。
IANA的傳輸編碼方式
根據(jù)IANA的定義,有下面幾個transfer encodings方式:
| 7bit | [RFC2045] |
| 8bit | [RFC2045] |
| binary | [RFC2045] |
| quoted-printable | [RFC2045] |
| base64 | [RFC2045] |
這些傳輸編碼方式都是什么意思呢?接下來一一講述。
7bit
我們知道計算機的第一個字符編碼就是ASCII編碼,它表示的范圍是從0到127。一個字節(jié)是8位,0到127意味著ASCII編碼只使用7bits,這也就是7bit的由來。
對于有些協(xié)議或者系統(tǒng)來說,他們只支持ASCII編碼,如果傳輸?shù)臄?shù)據(jù)范圍超過了7bit,則會出現(xiàn)異常。
8bit
7bit在使用中有很大的限制,因為對于常用的Unicode編碼來說,通常會使用2-4個字節(jié)作為信息的載體,如果是7bit的話,就會導(dǎo)致信息接收的不完整,從而失去數(shù)據(jù)原有的意義。
8bit的意思是,可以接收整個8bit的數(shù)據(jù),也就是說數(shù)據(jù)可以按整個字節(jié)來傳輸。這樣就沒有傳輸?shù)南拗屏恕K哉f8bit的應(yīng)用會更加廣泛,如果一個系統(tǒng)可以正確的接收8bit,那么我們可以稱這個系統(tǒng)為8-bit clean 。
binary
是不是8bit就可以適用于所有的系統(tǒng)呢?我們要知道,8bit是按字節(jié)來進行傳輸?shù)摹K詫τ诟袷礁泳o湊的二進制流的話是不適用的。所以有一個專門的二進制消息格式binary來處理二進制信息。
quoted-printable
如果數(shù)據(jù)是binary格式的,但是系統(tǒng)又不支持binary格式該怎么辦呢?
這時候我們就需要將binary轉(zhuǎn)換成為text格式,這種轉(zhuǎn)換叫做Binary-to-text encoding。其中quoted-printable和base64就是兩種轉(zhuǎn)換方式。
對于quoted-printable來說,就是將一個8-bit數(shù)據(jù)用7bit可讀的字符來表示。雖然7bit可以表示0-127的范圍,但是其中只有33 到 126是可讀字符,其他的都不是可讀字符。
那么quoted-printable是怎么轉(zhuǎn)換的呢?
quoted-printable中,任何 8 位字節(jié)值都可以用 3 個字符來進行編碼。=后面接兩個16進制的數(shù)字。
比如對于ASCII的換頁符12來說,轉(zhuǎn)換過來就是=0C。 因為=是特殊的字符,所以等號也需要轉(zhuǎn)義成=3D來表示。
對于可打印的ASCII字符,也就是33到126之間的十進制值,則不需要轉(zhuǎn)義,直接表示他們自己即可。
ASCII 制表符和空格字符、十進制值9和32可以由它們自己表示,除非這些字符出現(xiàn)在編碼行的末尾。在這種情況下,它們需要轉(zhuǎn)義為=09(制表符)或 =20(空格),或者后跟 =(軟換行符)作為編碼行的最后一個字符。
另外Quoted-Printable 編碼數(shù)據(jù)的一行不得超過76個字符。如果超出的話,可以根據(jù)需要添加軟換行符。軟換行符是由在編碼行末尾添加=組成,軟換行符不會在解碼文本中顯示為換行符。
base64
除了quoted-printable之外,還有一種常用的Binary-to-text encoding方式,叫做base64。
base64的原理是通過一個映射表,將二進制編碼映射成為64個字符(26個小寫字母+26個大寫字母+10個數(shù)字+加號和斜杠)。
每個Base64字符可以表示6bits的數(shù)據(jù),所以3個字節(jié)的數(shù)據(jù)可以用6個Base64字符來表示。
其映射表如下:
總結(jié)
以上就是IANA介紹的幾種傳輸編碼格式,大家學(xué)會了嗎?
本文已收錄于 http://www.flydean.com/13-transfer-encodings/
最通俗的解讀,最深刻的干貨,最簡潔的教程,眾多你不知道的小技巧等你來發(fā)現(xiàn)!
歡迎關(guān)注我的公眾號:「程序那些事」,懂技術(shù),更懂你!
總結(jié)
以上是生活随笔為你收集整理的网络标准之:IANA定义的传输编码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: netty系列之:channelHand
- 下一篇: netty系列之:netty中各不同种类