byte與各種編碼

2021-10-09 06:24:01 字數 1826 閱讀 3881

byte

byte是8位2進製,所有的資料都是由byte組成,如:

是一連串的byte

ascii字元」a」是乙個byte

可以說byte是我們的原始資料

編碼

如下問題:

這是2個byte「01100010 00010001」,它代表了什麼?

答案:如果沒有指明編碼,那他什麼都不代表

在ascii編碼規則中指明:「01100010」代表」b」,」00010001」代表控制字元vt

所有你可以認為這2個byte是b+vt

在unicode編碼中指明「01100010 00010001」代表漢字「我」

所有你也可以認為這2個byte是我

編碼是約定好的,物理在linux還是window,其編碼的byte都是相同的

ascii編碼

ascii屬於字元編碼

ascii以乙個byte進行編碼,從0-127(即00000000-01111111),分別代表不同的字元,

如97(01100001)代表a

unicode字符集

unicode字符集對全世界的字元進行了編號,如25105(十進位制)代表漢字「我」

ascii字元的位置在unicode字符集還是一樣(即0-127與ascii編碼相同)

unicode編碼(utf-16)

標準的unicode編碼稱為utf-16

unicode編碼直接以unicode字元的編號進行編碼

unicode編碼以2個byte進行編碼,如「01100010 00010001」(25105)代表漢字「我」

2個byte最多只能編碼6萬多個字元,因此新版本的unicode以4個位元組進行編碼

utf-8編碼

utf-8基於unicode字符集

utf乙個字元編碼使用的byte不固定,1-8個byte不等

乙個英文utf-8字元佔1byte,乙個漢字佔3byte

utf-8部分編碼規則如下,其中***x就是unicode字元的編號:

1位元組 0******x (編號小於127(即111 1111)使用乙個位元組,)

2位元組 110***xx 10******

3位元組 1110***x 10****** 10******

utf-32編碼

utf-32基於unicode字符集,直接以unicode字元的編號進行編碼

utf-32使用固定4個byte對unicode字符集進行編碼

base64

問題:11110111這個byte我像以字元的形式儲存,但這個byte在ascii,unicode,utf-8中均找不到對應的字元編碼,怎麼辦?

base64是一種轉換規則,其將3個byte分成4個組,每組6位,然後將這4個6位對照base64編碼表,如:010011對應t,以t的ascii碼對應的byte進行儲存

base64可以將任意的byte轉成的可顯示ascii,這有利與我們對一些非字元編碼的資料轉成ascii字元進行儲存或傳輸

image/jpeg

image/jpeg是jpg的編碼格式,其儲存的是一系列的byte

如何在兩個伺服器之間傳輸jpg?

我們讀取(即讀取一系列的byte),然後將這些byte發給對方,並告訴他這是image/jpeg編碼格式(即這是一張jpg),對方伺服器可以原封不動的將這些byte儲存到乙個檔案中,並將檔案的字尾改為 .jpg即可

byte 與各種資料型別互相轉換示例

public class testcase return b 位元組陣列到short的轉換.public static short bytetoshort byte b int到位元組陣列的轉換.public static byte inttobyte int number return b 位元組...

String解碼和byte 編碼實踐

本機預設使用字符集,可以使用chcp命令檢視 活動 頁936表示字符集為gb2312。前面已經詳細講述了位元組編碼和字元解碼,下面看具體例子 測試 測試測試 utf 8 string str2 new string str.getbytes utf 8 預設使用檔案的編碼進行解碼。string st...

Python 各種編碼

問題 做twitter資料去停用詞的處理,遇到 unicodedecodeerror gbk codec can t decode byte 0xbf in position 2 illegal multibyte sequence 的錯誤 分析 終端預設的編碼格式是gbk當呼叫print函式將內容...