ASCII字符集、GBK字符集、Unicode字符集
这里我直接上总结了,关于这三种字符集的基本介绍大家可以百度一下。
- 在计算机中,任意数据都是以二进制的形式来存储的
 - 计算机中最小的存储单元是一个字节
 - ASCII字符集中,一个英文占一个字节
 - 简体中文版Windows,默认使用GBK字符集
 - GBK字符集完全兼容ASCII字符集
一个英文占一个字节,二进制第一位是0
一个中文占两个字节,二进制高位字节的第一位是1 - Unicode字符集的UTF-8编码格式
一个英文占一个字节,二进制第一位是0,转成十进制是正数
一个中文占三个字节,二进制第一位是1,第一个字节转成十进制是负数 
使用字节流读取数据为什么会有乱码?
- 原因一:读取数据时未读完整个汉字
 - 原因二:编码和解码时的方式不统一
 
如何解决?
- 不要用字节流读取文本文件
 - 编码解码时使用同一个码表,同一个编码方式
 
Java中编码的方法

Java中解码的方法

代码演示:
package com.liming.charset;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class CharSetDemo {
    public static void main(String[] args) throws UnsupportedEncodingException {
        //编码
        String str = "ai你呦";
        byte[] bytes = str.getBytes();//默认不写UTF-8
        System.out.println(Arrays.toString(bytes));
        byte[] bytes1 = str.getBytes("GBK");
        System.out.println(Arrays.toString(bytes1));
        //解码
        String str2 = new String(bytes);
        System.out.println("默认编码方式:" + str2);
        String str3 = new String(bytes1,"GBK");
        System.out.println("GBK编码方式:" + str3);
    }
}
 
运行效果图:
 


















