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);//4
System.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);
}
}