Java學習 編碼解碼

2021-08-22 08:26:39 字數 1979 閱讀 5960

字串--->位元組陣列:編碼

位元組陣列--->字串:解碼

string str = "湯姆";

//編碼 預設編碼格式是gbk

byte buf = str.getbytes();

for(byte b : buf)

結果:-52 -64 -60 -73

string str = "湯姆";

//指定編碼格式 為utf-8

byte buf = str.getbytes("utf-8");

for(byte b : buf)

結果:-26 -79 -92 -27 -89 -122

string str = "湯姆";

byte buf = str.getbytes();

//解碼預設也是gbk

string str2 = new string(buf);

system.out.println(str2);

****************************************

string str = "湯姆";

byte buf = str.getbytes("utf-8");

string str2 = new string(buf,"utf-8");

system.out.println(str2);

結果:湯姆

編碼解碼問題:

public static void main(string args) throws ioexception, classnotfoundexception 

string s = new string(b,"iso8859-1");

system.out.println();

system.out.println(s);

//byte bb = s.getbytes("iso8859-1");

for(byte x :bb )

string s2 = new string(bb,"gbk");

system.out.println();

system.out.println(s2);

}結果:-67 -36 -56 -16

????

-67 -36 -56 -16

傑瑞

原理圖如下:

public static void main(string args) throws ioexception, classnotfoundexception 

string s = new string(b,"utf-8");

system.out.println();

system.out.println(s);

//byte bb = s.getbytes("utf-8");

for(byte x :bb )

string s2 = new string(bb,"gbk");

system.out.println();

system.out.println(s2);

}結果:-67 -36 -56 -16

????

-17 -65 -67 -17 -65 -67 -17 -65 -67 -17 -65 -67

錕斤拷錕斤拷

我們發現utf-8使用時亂碼

原因如下:

iso8859-1將gbk的解碼之後在iso中有對應的字元(雖然不是正確的字元),再次編碼之後就能恢復了

但是utf-8不一樣 將gbk的解碼之後在u8中沒有對應的字元 就使用?代替  而?是由-17 -65 -67 表示 當再次編碼之後就不能恢復了

Java 字元編碼與解碼

1 字元編碼的發展歷程 ascii 碼 因為計算機只認識數字,所以我們在計算機裡面的一切資料都是以數字來表示,因為英文本元有限,所以規定使用的位元組的最高位是 0,每乙個位元組都是以 0 127 之間的數字來表示。比如 a 對應 65,a 對應 97。這便是 美國標準資訊交換碼,ascii stri...

Java的中文編碼與解碼

編碼和解碼 前後的編碼格式要一致 編碼 將字串 位元組陣列 public byte getbytes 平台預設編碼集 預設的是gbk public byte getbytes charset charset 指定編碼格式 解碼 將位元組陣列 字串 public string byte bytes 使...

java中的編碼與解碼

需求 有時候需要進行特殊字串的傳遞,那麼就涉及到編碼和轉碼操作,比如在url中在把url當做引數傳遞,那麼就會出現問題因為多次出現 這樣就需要涉及編碼和解碼。實現 先編碼然後在解碼 編碼 urlencoder.encode urlstr,utf 8 解碼 urldecoder.decode enco...