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函式將內容...