1.常见字符集
1.标准ASCII字符集
美国信息交换标准代码,包括了英文、符号等。
标准ASCII使用1个字节存储一个字符,首位是0,总共可表示128个字符,对美国人来说完全够用。
2.GBK(汉字内码扩展规范,国标)
GBK中一个中文字符编码成两个字节的形式存储
注意:GBK兼容了ASCII字符集。
注意:GBK规定:汉字的第一个字节的第一位必须是1
3.Unicode字符集
Unicode是国际组织制定的,可以容纳世界上所有文字、符号的字符集。
UTF-8:是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节
英文字符、数字等只占1个字节(兼容标准ASCII编码),汉字字符占用3个字节。
4.注意事项
字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码
英文,数字一般不会乱码,因为很多字符集都兼容了ASCII编码
总结:
ASCII字符集:只有英文、数字、符号等,占1个字节。
lGBK字符集:汉字占2个字节,英文、数字占1个字节。
UTF-8字符集:汉字占3个字节,英文、数字占1个字节
2.字符集的编码、解码操作
package com.itheima.day09.teacher.io;import java.io.UnsupportedEncodingException;
import java.util.Arrays;public class ChangeCodeDemo {/*完成编码和解码编码将字符按照指定的字符集 转换成 字节。解码将字节按照指定的字符集 转换成 字符。String中提供 编码和解码的方法*/public static void main(String[] args) throws UnsupportedEncodingException {//编码 字符串--字节数组String str = "a我b";// getBytes() 按照默认字符集byte[] bytes = str.getBytes();System.out.println(bytes.length);System.out.println(Arrays.toString(bytes));// getBytes(String charsetName) 按照指定字符集byte[] gbks = str.getBytes("GBK");System.out.println(gbks.length);//4System.out.println(Arrays.toString(gbks));// 将字节按照指定的字符集 转换成 字符。解码操作// 字节---字符 字节数组---字符串// String 有构造 String(byte[] bytes)// 将字节数组按照默认的字符集 进行转换成 字符串String s1 = new String(bytes);//按照 默认字符集System.out.println(s1);String s2 = new String(gbks);//按照A的方式编码 按照B的方式解码 会出现乱码System.out.println(s2);// String 有构造 String(byte[] bytes,String charsetName)// 将字节数组按照指定的字符集 进行转换成 字符串String s3 = new String(gbks,"gbk");System.out.println(s3);}
}