1. 程式人生 > >java 中的字串編碼

java 中的字串編碼

1、1位元組=8位,1024位元組=1KB
2、16進位制0x12345678,其二進位制為00010010 00110100 01010110 01111000共4位元組
3、位元組序:兩個或多個位元組存放的先後順序(Big Endian大端序,Little Endian小端序)。UTF-16編碼的頭2個位元組裡標記位元組序: LE [0xFF, 0xFE], BE [0xFE, 0xFF]
4、0x12345678以Big Endian儲存:0x12 0x34 0x56 0x78
5、0x12345678以Little Endian儲存:0x78 0x56 0x34 0x12
6、字符集:Unicode
7、編碼:UTF-8、UTF-16、UTF-16BE、UTF-16LE等等
8、編碼是字符集的一種編碼方式。
9、檢視編碼的網站:https://unicode-table.com
10、
計算機儲存補碼
+1
原碼:0000 0001
反碼:0000 0001
補碼:0000 0001

-1
原碼:1000 0001
反碼(負數反碼:在原碼基礎上,除符號位外,其餘取反):1111 1110
補碼(負數補碼:在反碼基礎上,加1):1111 1111

java中byte型別佔8位。帶符號最大值是127,帶符號最小值是-128。不帶符號最大值是255,不帶符號最小值是0。

十進位制   十六進位制    二進位制
254        0xfe           11111110

將254(即00000000 00000000 00000000 11111110)賦值給一個byte型別的變數, 取低8位 11111110,直接當做補碼儲存,其反碼是1111 1101,其原碼是1000 0010(十進位制-2)。

 

11、編碼
UTF-8
沒有位元組序的概念。
所以1~4位元組UTF-8編碼看起來是這樣的:

0xxxxxxx
110xxxxx 10xxxxxx
1110xxxx 10xxxxxx 10xxxxxx
11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

單位元組可編碼的Unicode範圍:\u0000~\u007F(0~127)
雙位元組可編碼的Unicode範圍:\u0080~\u07FF(128~2047)
三位元組可編碼的Unicode範圍:\u0800~\uFFFF(2048~65535)
四位元組可編碼的Unicode範圍:\u10000~\u1FFFFF(65536~2097151)

UTF-16
2位元組或4位元組

檢視中文 “哈” 的編碼:

 

 

System.out.print(b & 0xFF); 

b是byte型別,儲存的是1000 0010(即10進位制-2),當jvm檢測到byte可能會轉為 int,或byte與int型別進行計算時,會將byte的最高24位補1,擴充到32位,再參與計算。

1000 0010 擴充到32位:11111111 11111111 11111111 10000010。

b & 0xFF == 11111111 11111111 11111111 10000010 & 00000000 00000000 00000000 11111111

所以 b & 0xFF == 00000000 00000000 00000000 00000000 10000010 (即十進位制254)