image.png
    GBK字符中一个中文字符占2个字节, UTF-8编码中一个中文占用3个字节
    image.png

    1. package com.itheima.d3_charset;
    2. import java.io.UnsupportedEncodingException;
    3. import java.nio.charset.StandardCharsets;
    4. import java.util.Arrays;
    5. /**
    6. * 目标:学会自己进行文字的编码和解码,为以后可能用到的场景做准备
    7. */
    8. public class Test {
    9. public static void main(String[] args) throws UnsupportedEncodingException {
    10. // 1. 编码:把文字转换成字节(使用指定的编码)
    11. String name = "abc我爱你中国"; //在utf-8编码中: 每个中文占用3个字节 英文占用1个字节
    12. // 使用String类的getBytes获取当前字符串占用的字节 返回一个byte类型的数组
    13. // byte[] bytes = name.getBytes(); // 以当前代码默认字符集进行编码 (utf—8)
    14. // 也可以指定编码(GBK)中文占用2个字节
    15. byte[] bytes = name.getBytes("GBK");//要抛异常
    16. // 数组当前数组字节的长度 length
    17. System.out.println(bytes.length);
    18. System.out.println(Arrays.toString(bytes));
    19. // 输出都会转换成对应的ASCII 字符
    20. // [97, 98, 99, -26, -120, -111, -25, -120, -79, -28, -67, -96, -28, -72, -83, -27, -101, -67]
    21. // 2.解码:把字节转换成对应的中文形式(编码前和编码后的字符集必须一致,否则乱码)
    22. // 默认utf-8
    23. // String rs = new String(bytes);// new String构造器会进行解码(将bytes数组进行解码)
    24. // 指定GBK解码
    25. String rs = new String(bytes,"GBK"); // 指定格式解码
    26. System.out.println(rs); // 这里会解码错误,因为前面用的是GBK格式(一个中文字符占用2个字符,)这里默认是UTF-8 所以会解码错误
    27. // 乱码了 abc�Ұ����й�
    28. }
    29. }