字符集

计算机只能处理0和1组成的二进制数据,为了让计算机能够存储处理字符,计算机的设计者美国人就把他们会用到的每一个字符进行了编码(所谓编码,就是人为的为每一个字符关联一个数字(称为码点)),计算机在存储某个字符时,存储的就是字符对应码点的二进制数据。
ASCII字符集:《美国信息交换标准代码》,包含英文字母、数字、标点符号、控制字符
    特点:1个字符占1个字节

GBK字符集:中国人自己的字符集,兼容ASCII字符集,还包含2万多个汉字
    特点:1个字母占用1个字节;1个汉字占用2个字节

Unicode字符集:包含世界上所有国家的文字,有三种编码方案,最常用的是UTF-8
    UTF-8编码方案:英文字母、数字占1个字节兼容(ASCII编码)、汉字字符占3个字节
  • 相关方法(String类中方法)

| | 方法名 | 说明 |
| -------- | ---------------------------------------------- | -------------------------------------------------------- |
| | byte[] getBytes() | 使用平台的默认字符集将一个字符串编码为字节数组 |
| | byte[] getBytes(String charsetName) | 使用指定的字符集将一个字符串编码为字节数组 |
| | String(byte[] bytes) | 使用平台的默认字符集解码指定的字节数组来创建字符串 |
| | String(byte[] bytes, String charsetName) | 通过指定的字符集解码指定的字节数组来创建字符串 |

  • 注释

    // byte[] getBytes () 使用平台的默认字符集将一个字符串编码为字节数组
    // byte[] getBytes (String charsetName)使用指定的字符集将一个字符串编码为字节数组
    // String( byte[] bytes)使用平台的默认字符集解码指定的字节数组来创建字符串 |
    // String( byte[] bytes, String charsetName)通过指定的字符集解码指定的字节数组来创建字符串
public static void main(String[] args) throws UnsupportedEncodingException {

        // byte[] getBytes () 使用平台的默认字符集将一个字符串编码为字节数组
        // byte[] getBytes (String charsetName)使用指定的字符集将一个字符串编码为字节数组
        // String( byte[] bytes)使用平台的默认字符集解码指定的字节数组来创建字符串 |
        // String( byte[] bytes, String charsetName)通过指定的字符集解码指定的字节数组来创建字符串

        // 1. 编码
        // 从字符串  ->   码点数字
        String str1 = "中国";
        // byte[] getBytes () 使用平台的默认字符集将一个字符串编码为字节数组
        byte[] str1U8Bytes = str1.getBytes();
        // str1U8Bytes = [-28, -72, -83, -27, -101, -67]
        System.out.println("str1U8Bytes = " + Arrays.toString(str1U8Bytes));


        // byte[] getBytes (String charsetName)使用指定的字符集将一个字符串编码为字节数组
        byte[] strGbkBytes = str1.getBytes("GBK");
        // strGbkBytes = [-42, -48, -71, -6]
        System.out.println("strGbkBytes = " + Arrays.toString(strGbkBytes));


        // 2.解压
        // 从 码点数字(字节数组) -> 字符串 ====> 字符串构造方法


        // 使用默认字符集:U8
        // String( byte[] bytes)使用平台的默认字符集解码指定的字节数组来创建字符串
        String str2 = new String(new byte[]{-28, -72, -83, -27, -101, -67});
        // str2 = 中国
        System.out.println("str2 = " + str2);

        // 使用指定字符集:GBK
        // String( byte[] bytes, String charsetName)通过指定的字符集解码指定的字节数组来创建字符串
        String str3 = new String(new byte[]{-42, -48, -71, -6},"gbk");
        // str3 = 中国
        System.out.println("str3 = " + str3);

        // 演示乱码
        // 编解码使用不同的字符集:UTF-8解码时,使用字节数组是通过GBK编码出来的
        String str4 = new String(new byte[]{-42, -48, -71, -6});
        // �й�
        System.out.println("str4 = " + str4);

    }
最后修改:2023 年 05 月 15 日
如果觉得我的文章对你有用,请随意赞赏