由於計算機只能處理數字,因此若是要處理文本,就得先把文本轉換成數字才能處理。編碼
最先計算機在設計時採用8bit做爲一個字節(byte),因此一個字節能標識的最大整數就是255「11111111(B) = 255」,0-255被用來標識大小寫英文字母、數字和一些符號,這個編碼表就被稱爲ASCII編碼。加密
若是要用來表示中文(漢字數量大約近10w個),顯然一個字節是不夠的,至少須要兩個字節。並且還不能和ASCII編碼表衝突,因此中國指定了GB2312編碼,用來編碼中文。 相似的,其餘語言也面臨這個問題,爲了統一全部文字的編碼,Unicode應運而生。設計
Unicode一般使用兩個字節來表示一個字符,全部的英文編碼從單字節變成了雙字節,把高字節所有填0補齊。3d
目前Unicode字符分爲17組編排,0x0000至0x10FFFF,每組稱爲平面(Plane),而沒平面擁有65535個碼位,共1114112個,然而目前只用了少數平面。code
UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode可變長度字符編碼。orm
字符集:爲每個字符分配一個惟一的ID(碼位/碼點/Code Point) 編碼規則:將碼位轉換爲字節序列的規則(編碼/解碼 => 加密/解密)cdn
UTF-8是一種變長字節編碼方式。最小編碼單位(code unit)爲一個字節。一個字節的前1-3個bit爲描述性部分,後面爲實際序號部分。blog
Unicode符號範圍「十六進制」 | UTF-8編碼「二進制」 |
---|---|
0000 0000-0000 007F | 0xxxxxxxx |
0000 0080-0000 07FF | 110xxxxx 10xxxxxx |
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx |
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx |
綜上:若是一個字節的第一位是0,則這個字節單獨就是一個字符;若是第一位是1,則連續有多少個1,就表示當前佔用多少個字節。unicode
舉例:字符串
禿
的unicode爲79C3「0111 1001 1100 0011(B)」,根據上表處於 (0000 0080-0000 FFFF)範圍內,所以UTF-8須要三個字節,即格式爲1110xxxx 10xxxxxx 10xxxxxx,將unicode從最後一位往前依次填入格式x中,多出的補0。能夠得出UTF-8編碼爲11100111 10100111 10000011,轉爲十六進制爲E7A783。
以上面禿
爲例,unicode碼爲79C3,須要兩個字節存儲,一個字節是79,另外一個字節是C3。存儲的方式79在前,C3在後,就是Big endian(大頭方式);C3在前,79在後就是Little endian(小透方式)
Base64是一種基於64個可打印的字符來標識二進制數據的標識方法。可打印的字符包括字母A-Z、a-z、數字0-9,這樣公有62個字符,此外兩個可打印的符號在不一樣系統中而不一樣。
在MIME格式的的電子郵件中,另外兩個符號爲加號+和斜槓/,等號=用來作後綴用途。
綜上得出: