java byte[]轉String再轉回byte[]不一致問題
阿新 • • 發佈:2020-12-09
java byte[]轉String再轉回byte[]不一致問題
問題原因 :
new String(byte[])和getBytes()預設使用的編碼都是通過這條語句獲取的編碼
解決原理:
由於UTF-8是多位元組編碼,需要用多個位元組來表示一個字元的編碼,所以也就出現了在轉換之後byte[]陣列長度、內容不一致的情況。
而ISO-8859-1編碼是單位元組編碼,所以使用該編碼就不會出現上面的問題
測試程式碼:
import java.nio.charset.Charset; import java.util.Arrays; public class test { publicstatic void main(String[] args) { byte[] bytes = new byte[] { 41, -31, -91, 41, -71, -11 }; byte[] myBytes = new String(bytes).getBytes(); System.out.println(Arrays.toString(bytes)); System.out.println(Arrays.toString(myBytes)); // 問題原因 :new String(byte[])和getBytes()預設使用的編碼都是通過這條語句獲取的編碼// 獲取預設編碼 System.out.println(Charset.defaultCharset().name()); // 解決原理 // 由於UTF-8是多位元組編碼,需要用多個位元組來表示一個字元的編碼,所以也就出現了在轉換之後byte[]陣列長度、內容不一致的情況。 // 而ISO-8859-1編碼是單位元組編碼,所以使用該編碼就不會出現上面的問題 byte[] bytes3 = new String(bytes, Charset.forName("ISO-8859-1")).getBytes(Charset.forName("ISO-8859-1")); System.out.println(Arrays.toString(bytes3)); } }
參考文章:https://blog.csdn.net/wusj3/article/details/80606728