成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Java程序員遇上字符亂碼2-容易混淆的兩種編碼類別

hidogs / 2128人閱讀

摘要:字符集編碼就是對字符根據(jù)不同字符集中對應的格式進行編碼解碼,這個大家都好理解。下面詳細說說,以編碼解碼和編碼解碼為例。

《來自羅志曉的筆記:http://note.youdao.com/notesh...》
我們平時老說的編碼解碼,很多人都只知道 字符集編碼解碼。其實除了字符集編碼解碼,常見的還有另一類,如 Url編碼解碼、Base64編碼解碼。
這兩類編碼的原理是完全不一樣的,如果沒有了解到這個分類以為編碼都是字符集編碼,那么你會無法理解那些解釋編碼的博文,會疑問:怎么說的都不一樣啊,久之真的會懷疑人生??珊薜氖?,很多博文在關鍵環(huán)節(jié)上 對這兩個概念 都是統(tǒng)一用 “編碼解碼” 四字一筆帶過。

字符集編碼: 就是對字符 根據(jù)不同字符集中對應的格式 進行編碼解碼,這個大家都好理解。
而另一類別編碼解碼出現(xiàn)的意義并不是 為在不同字符集之間對字符進行格式轉換,而是為了別的原因,例如:將不安全字符轉化、原內(nèi)容不可見以提高安全性、和 便于網(wǎng)絡傳輸。
下面詳細說說,以Base64編碼解碼Url 編碼解碼為例。

Base64編碼解碼

生活中的場景:
我們平時接收發(fā)送郵件所使用的SMTP協(xié)議,是基于文本的協(xié)議,也就是說只能處理常見字符??墒俏覀?yōu)楹芜€可以發(fā)送接收圖片、視頻、壓縮包等二進制文件?這就是Base64編碼解碼 出現(xiàn)的意義了。我們發(fā)送郵件前,客戶端會將 圖片等進行Base64編碼,于是整張圖片變成了 人類可讀的常見字符,然后在發(fā)送出去。接收方客戶端接收到后,再 Base64解碼還原成圖片呈現(xiàn)給我們。
原理過程:
簡單來說,Base64就是一種用 64個Ascii字符來表示任意二進制數(shù)據(jù)的方法,或者簡單的說將二進制數(shù)據(jù)編碼成Ascii字符。
這 64個Ascii字符如下:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

一眼看去就知道是26個字母大小寫和數(shù)字和+/ 。

沒錯,別驚訝,你沒理解錯,上面的64個字符真的可以表示任意的二進制文件數(shù)據(jù)。那么是怎么操作的呢?過程如下:
以3個字節(jié)為一組(24位),按每6位高位補0擴展成8位得到4個字節(jié)(32位)。
(一)圖片舉例
假如一張圖片只有四個字節(jié):11101111 11011011 11101111 11011011

以3個字節(jié)為一組:(剩余的字節(jié)不足3個字節(jié)的話則補0湊夠) 11101111 11011011 11101111 11011011 00000000 00000000

每組 按 6bit 劃分成 4小分組 111011 111101 101111 101111 110110 110000 000000 000000

每個小分組高位補0 以湊夠 8bit,即一個字節(jié) 00111011 00111101 00101111 00101111 00110110 00110000 00000000 00000000
[這里你可能會容易認為:每個新的字節(jié) 映射 到一個Ascii字符集中的字符,然而你又錯了!]

上述的每個新的字節(jié) 其實是 上表格的字符集合的索引下標(位置序號)而已,并非映射到原生Ascii字符集。如下圖,我們將新的字節(jié)用 十進制 展示:

根據(jù)索引做轉換:[這里注意:凡是后面補0 的字節(jié),只能算映射到 = ]
59 ---> 7 61---> 947---> v 47---> v 54---> 2 48--->w 0---> = 0---> =
即:

因此最后這張圖片變成:79vv2w== ,即Ascii字符,這樣就可以符合SMTP文本協(xié)議了。

(二)字符舉例
圖片的話,我們是著眼其 字節(jié) 的 。字符也是如此。首先我們要 根據(jù)字符集 找出字符對應的二進制字節(jié),然后按照上面的過程編碼。下面 以“你a”為例

UTF-8

  ‘你’ :   `0xE4BDA0` 即   `111001001011110111000000`    
  ‘a(chǎn)’  :   `0x61` 即`01100001`  合起來就是: `11100100101111011100000001100001`
  計算后得到結果: `5L2gYQ==`    
  

GBK

  ‘你’  :   `0xC4E3` 即   `1100010011100011`   
  ‘a(chǎn)’   :   `0x61`即 `01100001`  合起來就是:`110001001110001101100001` 
  計算后得到結果就和上面不一樣了。

Tips:

其實網(wǎng)上好多Base64在線編碼器,如工具網(wǎng)址:http://www.qqxiuzi.cn/bianma/...我們可以很方便地Base64編碼:【注意:在網(wǎng)頁上輸入框輸入的字符都是 根據(jù) 響應頭中的ContentType指定的字符集編碼進行編碼的】

Base64編碼的優(yōu)缺點:

優(yōu)點:可以將二進制數(shù)據(jù)轉換成可打印Ascii字符,方便傳輸數(shù)據(jù);對數(shù)據(jù)進行簡單的加密,肉眼不可識別。

缺點:內(nèi)容編碼后的體積會變大,編碼和解碼需要額外的工作量。

常見運用場景:(來自網(wǎng)絡)

將圖片等資源文件以Base64編碼形式直接放于代碼中,使用的時候反Base64后轉換成Image對象使用;

有些文本協(xié)議不支持不可見字符的傳遞,只能轉換成可見字符來傳遞信息;

有時在一些特殊的場合,大多數(shù)消息是純文本的,偶爾需要用這條純文本通道傳一張圖片之類的情況發(fā)生的時候,就會用到Base64。

注意:

Base64 不是什么實質(zhì)意義上的加解密算法,不過的確可以將 原內(nèi)容 ”改頭換面“,人們往往將這理解成 加密 了。

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://m.hztianpu.com/yun/67439.html

相關文章

  • Python編碼問題及中文解決方案

    摘要:中國人民看到這樣很不錯,于是就把這種漢字方案叫做。結果擴展之后的編碼方案被稱為標準,包括了的所有內(nèi)容,同時又增加了近個新的漢字包括繁體字和符號。 聲明:文章借鑒自【徹底搞懂 python 中文亂碼問題】 一. 各種編碼的由來 1.1 ASCII編碼 很久很久以前,有一群人,他們決定用8個可以開合的晶體管來組合成不同的狀態(tài),以表示世界上的萬物。他們看到8個開關狀態(tài)是好的,于是他們把這稱為...

    kevin 評論0 收藏0
  • 深入分析 Java Web 中的中文編碼問題

    摘要:文章首發(fā)地址深入分析中的中文編碼問題背景編碼問題一直困擾著程序開發(fā)人員,尤其是在中更加明顯,因為是跨平臺的語言,在不同平臺的編碼之間的切換較多。 文章首發(fā)地址:深入分析 Java Web 中的中文編碼問題 背景: 編碼問題一直困擾著程序開發(fā)人員,尤其是在 Java 中更加明顯,因為 Java 是跨平臺的語言,在不同平臺的編碼之間的切換較多。接下來將介紹 Java 編碼問題出現(xiàn)的根本原...

    jsyzchen 評論0 收藏0
  • JavaWeb 亂碼問題終極解決方案!

    摘要:經(jīng)常有讀者在公眾號上問亂碼的問題,昨天又有一個小伙伴問及此事,其實這個問題很簡單,但是想要說清楚卻并不容易,因為每個人亂碼的原因都不一樣,給每位小伙伴都把亂碼的原因講一遍也挺費時間的,因此,松哥今天決定寫一篇文章,和大伙好好捋捋中的亂碼問題 經(jīng)常有讀者在公眾號上問 JavaWeb 亂碼的問題,昨天又有一個小伙伴問及此事,其實這個問題很簡單,但是想要說清楚卻并不容易,因為每個人亂碼的原因...

    canger 評論0 收藏0
  • 文件和字符編碼

    摘要:為了消除文件格式和字符編碼的疑惑,上網(wǎng)搜索并翻出以前收藏的文章,心結總算了卻。本文即是對文件和字符編碼的個人總結。雙字節(jié)多字節(jié)字符,編碼方式和字節(jié)序,才是困擾程序員的問題。使用兩個字節(jié)表示一個字符,平臺默認的字符編碼方案都是。 轉載請注明來源:https://tlanyan.me/ascii-bina... 近期對識別文件格式感到好奇,不幸和字符編碼搞混,不明其中原理導致心煩意亂。為...

    _Zhao 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<