字符集与编码规则

字符集

强调:UTF-8是编码规则,不是字符集

过程:

字符 --查表获得对应数字,--编码

解码---查表----获取字符

ASCII码 :一个字节 8bit

GBK字符集(windows系统默认使用的GBK,系统显示ANSI)

存储规则:

GBK英文编码规则:

  • 英文用一个字节存储,完全兼容ASCII码
  • 不足8位,前面补0

GBK汉字编码规则:

  • 汉字两个字节存储
  • 高位字节二进制用1开头,转成十进制之后是一个负数

Unicode字符集

UTF-16编码规则:用2~4个字节保存

UTF-32编码规则:用4个字节保存

UTF-8编码规则:用1~4个字节保存

英文用1个字节,中文用3个字节表示

乱码:

原因:

  1. 读取数据时没有读完整个汉字
  2. 编码和解码的规则不统一

避免方法:

  1. 不要用字节流读取文件
  2. 编码时使用同一个编码规则,同一个码表

java中编码和解码的实现

public byte[] getByte(String charsetName) 使用指定的方式编码

public String(Byte[] bytes,String charSetName) 使用指定的方式解码

(不带参就使用默认编码,解码)

   @Test
    public void encode() throws UnsupportedEncodingException {
        String str = "无敌是多么寂寞";
        byte[] bytes= str.getBytes("UTF-8");
        String str1= new String(bytes,0,bytes.length,"GBK");
        System.out.println(str1);
    }

字符集与编码规则_第1张图片

你可能感兴趣的:(IO流,字符集)