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

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

相關文章
相關標籤/搜索