1. 程式人生 > 實用技巧 >java byte[]轉String再轉回byte[]不一致問題

java byte[]轉String再轉回byte[]不一致問題

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 {

    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