一、字符集
1.1 字符集的来历
我们知道计算机是美国人发明的,由于计算机能够处理的数据只能是0和1组成的二进制数据,为了让计算机能够处理字符,于是美国人就把他们会用到的每一个字符进行了编码(所谓编码,就是为一个字符编一个二进制数据),如下图所示:
1.2 汉字和字母的编码特点
需要我们注意汉字和字母的编码特点:
如果是存储字母,采用1个字节来存储,一共8位,其中第1位是0
如果是存储汉字,采用2个字节来存储,一共16位,其中第1位是1
当读取文件中的字符时,通过识别读取到的第1位是0还是1来判断是字母还是汉字
如果读取到第1位是0,就认为是一个字母,此时往后读1个字节。
如果读取到第1位是1,就认为是一个汉字,此时往后读2个字节。
1.3 Unicode字符集
下面我们详细介绍一下UTF-8这种编码方案的特点。
1.UTF-8是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节 2.英文字符、数字等只占1个字节(兼容标准ASCII编码),汉字字符占用3个字节。 3.极少数字符占4个字节 注意:技术人员在开发时都应该使用UTF-8编码!1.4 字符集小结
ASCII字符集:《美国信息交换标准代码》,包含英文字母、数字、标点符号、控制字符 特点:1个字符占1个字节 GBK字符集:中国人自己的字符集,兼容ASCII字符集,还包含2万多个汉字 特点:1个字母占用1个字节;1个汉字占用2个字节 Unicode字符集:包含世界上所有国家的文字,有三种编码方案,最常用的是UTF-8 UTF-8编码方案:英文字母、数字占1个字节兼容(ASCII编码)、汉字字符占3个字节1.5 编码和解码
编码:把字符串按照指定的字符集转换为字节数组
解码:把字节数组按照指定的字符集转换为字符串
/** * 目标:掌握如何使用Java代码完成对字符的编码和解码。 */ public class CharacterTest1 { public static void main(String[] args) throws Exception { // 1. 编码 String data = "a我b"; byte[] bytes = data.getBytes(); // 默认是按照平台字符集(UTF-8)进行编码 System.out.println(Arrays.toString(bytes)); // 按照指定字符集进行编码 byte[] bytes1 = data.getBytes("GBK"); System.out.println(Arrays.toString(bytes1)); // 2. 解码 String s1 = new String(bytes); // 按照平台默认编码(UTF-8)解码 System.out.println(s1); String s2 = new String(bytes1, "GBK"); System.out.println(s2); } } 一键获取完整项目代码总结:
1. 常见字符集有哪些?各自存储数据的特点是什么?
英文和数字等在任何国家的字符集中都占1个字节
GBK字符中一个中文字符占2个字节
UTF-8编码中一个中文1般占3个字节
2. 编码前的字符集和解码时的字符集有什么要求?
必须一致,否则会出现字符乱码
3. 英文和数字,在常见的字符集中是否会出现乱码?为什么?
英文,数字一般不会乱码,因为很多字符集都兼容了ASCII编码。