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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM