王德貴 丁大為
在學習、生活和工作中,人和人之間離不開各種交流和溝通。除了面對面通過語言、表情和動作等方式交流以外,還可以進行網(wǎng)上交流,這就需要相互間傳送一些文字、圖片、聲音或是視頻等信息,那么這些信息是怎么傳送的呢?圖片和視頻的審核,是怎么知道其中有違法內容的呢?在AppInventor安卓應用開發(fā)時,音樂、圖片和視頻為什么不能直接傳輸呢?那現(xiàn)在我們就來探討一下,Base64編碼在信息傳輸過程中的重要應用。
在生活中,我們經(jīng)常會遇到這樣的情況,比如去銀行辦事,到那之后,會拿到一個號碼,然后就是等待工作人員叫到這個號碼,你才去辦理業(yè)務。銀行并不知道你是誰,也無須知道是誰,用這個號碼對應每個辦理業(yè)務的人就可以了。其實,這就是編碼。
字符集(Character set)是多個字符的集合,字符集種類較多,每個字符集包含的字符個數(shù)不同,我們常見的字符集有ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。計算機要準確地處理各種字符集文字,必須進行字符編碼,計算機才能識別和存儲各種文字,但要是把字符發(fā)送給對方,對方卻只能識別ASCII碼,其他字符集還需要再次進行編碼,這就是Base64編碼誕生的原因。
Base64是網(wǎng)絡上最常見、也是最基本的用于傳輸8bit字節(jié)代碼的二進制編碼方式,用來將非ASCII字符的數(shù)據(jù)轉換成ASCII字符的一種方法。它用64個可打印字符(包括a-z、A-Z、0-9、/、+)來表示二進制數(shù)據(jù)0-63,碼表如圖。
編碼規(guī)則:①把3個字節(jié)變成4個字節(jié)。②每76個字符加一個換行符。③最后的結束符也要處理。
原文的字節(jié)數(shù)量如果是3的倍數(shù),Base64編碼要求把每三個8bit的字節(jié)轉換為四個6bit的字節(jié)(3×8 = 4×6 = 24),然后把6bit兩位高位添0,組成四個8bit的字節(jié),也就是說,轉換后的字符串將要比原來的長1/3。
原文的字節(jié)數(shù)量如果不是3的倍數(shù),那就將原文剩余的字節(jié)根據(jù)編碼規(guī)則繼續(xù)單獨轉(1變2,2變3;不夠的位數(shù)用0補全),再用“=”號補滿4個字節(jié)。這就是為什么有些Base64編碼會以一個或兩個等號結束的原因,但等號最多只有兩個。我們根據(jù)規(guī)則將以下幾個字符轉換成Base64編碼。
根據(jù)這幾個例子,我們已經(jīng)看到了Base64就是用6位(2的6次冪就是64)表示字符,因此稱為Base64。同理,Base32就是用5位,Base16就是用4位,大家將來在編程中遇到時就不會覺得陌生了(例1、例2、例3)。
傳輸圖片的過程中為什么要編解碼?計算機上存儲的信息都有首尾定界符,如果在傳輸時只是簡單地將圖片以二進制讀出再傳輸,如果接收信息位中出現(xiàn)不可見的特殊字符(如控制字符)就會造成接收方誤判,而使信息接收不完整(錯誤)。為了保證數(shù)據(jù)被完整地傳給對方,需要先對其進行編碼,等接收方完整收到后,再對其進行解碼。
同樣聲音和視頻等信息的編碼傳輸,也是一樣的道理。
根據(jù)前面的分析和講解,我們對Base64編碼有了初步的理解,其實處理任何發(fā)送或接收的信息,都要用到Base64編碼,只是有些應用里內置了轉換過程,但我們要從頭開發(fā)應用程序時,就需要做底層的信息轉換處理。下面我們看看文本、照片、聲音的Base64編碼在AppInventor安卓應用開發(fā)中的具體運用。由于視頻的Base64編碼太長,這里不做說明。
掃碼下載源代碼并在AppInventor中導入。先看看頁面及組件設計,程序在后面具體應用中說明(圖1)。
當點擊“文本”按鈕時,隱藏“圖像選擇框”,取消“文本輸入布局”隱藏;當點擊“拍照”按鈕,隱藏“文本輸入布局”。其他按常規(guī)設置即可。
(1)文本編碼
文本編碼就是讓AppInventor按Base64編碼規(guī)則將源文件轉碼。
先創(chuàng)建變量,保存需要轉換文件的路徑(圖2)。
當點擊“文本”按鈕時,“圖像選擇框”隱藏,“文本輸入布局”顯示,輸入文本后,點擊“提交”確認,點擊“查看”按鈕即可看到對應的Base64編碼(圖3)。
文本輸入中文“電腦報”,點擊按鈕“提交”和“查看”,即可看到上述效果。大家可以驗證前面所講的3個例子,或是輸入任何字符進行測試,都可看到對應的Base64編碼。
從以上程序可以看到,在AppInventor應用中,文本編碼作為基本測試,還是很好理解的,當然,也可以將Base64編碼進行解碼還原出原始字符,這里不再贅述。下一部分我們繼續(xù)講解圖片編碼、聲音編碼,以及AI智能審核原理解析。
(未完待續(xù))