java byte[]轉String再轉回byte[]不一致問題java
問題緣由 :數組
new String(byte[])和getBytes()默認使用的編碼都是經過這條語句獲取的編碼測試
解決原理:
因爲UTF-8是多字節編碼,須要用多個字節來表示一個字符的編碼,因此也就出現了在轉換以後byte[]數組長度、內容不一致的狀況。
而ISO-8859-1編碼是單字節編碼,因此使用該編碼就不會出現上面的問題編碼
測試代碼:spa
import java.nio.charset.Charset; import java.util.Arrays; public class test { public static 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.net