關於位元組編碼問題

2021-09-02 10:49:30 字數 1156 閱讀 9093

近期在做專案時,遇到如下問題。先看**:

package test11;

public class teststr ;

string str2 = new string(byte);

byte byte2 = str2.getbytes();

for(byte b:byte2)}}

測試結果:

24,63,61,102,-51,-78,17,126,

對於位元組陣列使用new string(byte)轉換後,再使用string類的getbytes()編碼還原,發現編碼前後位元組陣列不一致。經查預設情況下使用utf-8編碼,而utf-8是可變長度的編碼,原來的位元組陣列就被改變了,而iso8859-1通常叫做latin-1,latin-1包括了書寫所有西方歐洲語言不可缺少的附加字元,其中 0~127的字元與ascii碼相同,它是單位元組的編碼方式,這樣第二種方式生成的string裡的位元組陣列就跟原來的位元組陣列一樣(參考文章:[url]因此將**修正為如下,可以正常編碼:

package test11;

public class teststr ;

string str2 = new string(byte,"iso-8859-1");

byte byte2 = str2.getbytes("iso-8859-1");

for(byte b:byte2)

}}

在string--byte--string處理模式中,使用預設或者其它編碼格式都可以;但在string--byte--byte--string--byte處理模式中,涉及位元組陣列被處理成新的位元組陣列後多次轉換傳遞時,為了避免位元組陣列變化而影響結果,可以使用iso-8859-1進行處理。在處理中文時,可以使用gbk或utf-8,而不能使用iso-8859-1,否則會出現亂碼。因此模式二下同時涉及中文,可以使用兩者結合的方式,例如下邊的**:

package test11;

public class teststr

}

注意:此處使用的是string類的構造方法傳入編碼方式進行的資料轉換

關於位元組序問題

位元組序分為主機位元組序和網路位元組序。主機位元組序主要分為兩種 大端位元組序 big endian 和小端位元組序 little endian 不同的處理器架構,有不同的位元組序。執行在同一臺計算機上的程序相互通訊時,一般不用考慮位元組序問題。位元組序是乙個處理器架構特性,用於指示像整數這樣的大資...

關於寬位元組編碼導致的web安全問題

這個位址說明了寬位元組編碼的web安全問題 php5.3版本以上已經不支援magic quotes gpc 設定了 magic quotes gpc設定在php.ini檔案中 下面介紹關於quote魔術鍵的兩個設定 magic quotes gpc on 伺服器上輸入或者輸出的敏感字元 單引號和雙引...

關於按字編碼和按位元組編碼問題(計算機組成)

如果有些題目說 按 字 定址,就說明是儲存單元大小為字長的位數,按 位元組 定址,說明儲存單元式位元組的大小 個人理解,沒有考證 某計算機字長 32位,儲存容量 8mb。按字編址,其定址範圍為 0 2m 1 計算步驟 8mb位元組 8 1024 1024 8 位。所以 8mb 32 位 2m.2 某...