字符集
计算机只能处理0和1组成的二进制数据,为了让计算机能够存储处理字符,计算机的设计者美国人就把他们会用到的每一个字符进行了编码(所谓编码,就是人为的为每一个字符关联一个数字(称为码点)),计算机在存储某个字符时,存储的就是字符对应码点的二进制数据。
ASCII字符集:《美国信息交换标准代码》,包含英文字母、数字、标点符号、控制字符
特点:1个字符占1个字节
GBK字符集:中国人自己的字符集,兼容ASCII字符集,还包含2万多个汉字
特点:1个字母占用1个字节;1个汉字占用2个字节
Unicode字符集:包含世界上所有国家的文字,有三种编码方案,最常用的是UTF-8
UTF-8编码方案:英文字母、数字占1个字节兼容(ASCII编码)、汉字字符占3个字节
- 相关方法(String类中方法)
| | 方法名 | 说明 |
| -------- | ---------------------------------------------- | -------------------------------------------------------- |
| 编 | byte[] getBytes() | 使用平台的默认字符集将一个字符串编码为字节数组 |
| 码 | byte[] getBytes(String charsetName) | 使用指定的字符集将一个字符串编码为字节数组 |
| 解 | String(byte[] bytes) | 使用平台的默认字符集解码指定的字节数组来创建字符串 |
| 码 | String(byte[] bytes, String charsetName) | 通过指定的字符集解码指定的字节数组来创建字符串 |
注释
// byte[] getBytes () 使用平台的默认字符集将一个字符串编码为字节数组 // byte[] getBytes (String charsetName)使用指定的字符集将一个字符串编码为字节数组 // String( byte[] bytes)使用平台的默认字符集解码指定的字节数组来创建字符串 | // String( byte[] bytes, String charsetName)通过指定的字符集解码指定的字节数组来创建字符串
public static void main(String[] args) throws UnsupportedEncodingException {
// byte[] getBytes () 使用平台的默认字符集将一个字符串编码为字节数组
// byte[] getBytes (String charsetName)使用指定的字符集将一个字符串编码为字节数组
// String( byte[] bytes)使用平台的默认字符集解码指定的字节数组来创建字符串 |
// String( byte[] bytes, String charsetName)通过指定的字符集解码指定的字节数组来创建字符串
// 1. 编码
// 从字符串 -> 码点数字
String str1 = "中国";
// byte[] getBytes () 使用平台的默认字符集将一个字符串编码为字节数组
byte[] str1U8Bytes = str1.getBytes();
// str1U8Bytes = [-28, -72, -83, -27, -101, -67]
System.out.println("str1U8Bytes = " + Arrays.toString(str1U8Bytes));
// byte[] getBytes (String charsetName)使用指定的字符集将一个字符串编码为字节数组
byte[] strGbkBytes = str1.getBytes("GBK");
// strGbkBytes = [-42, -48, -71, -6]
System.out.println("strGbkBytes = " + Arrays.toString(strGbkBytes));
// 2.解压
// 从 码点数字(字节数组) -> 字符串 ====> 字符串构造方法
// 使用默认字符集:U8
// String( byte[] bytes)使用平台的默认字符集解码指定的字节数组来创建字符串
String str2 = new String(new byte[]{-28, -72, -83, -27, -101, -67});
// str2 = 中国
System.out.println("str2 = " + str2);
// 使用指定字符集:GBK
// String( byte[] bytes, String charsetName)通过指定的字符集解码指定的字节数组来创建字符串
String str3 = new String(new byte[]{-42, -48, -71, -6},"gbk");
// str3 = 中国
System.out.println("str3 = " + str3);
// 演示乱码
// 编解码使用不同的字符集:UTF-8解码时,使用字节数组是通过GBK编码出来的
String str4 = new String(new byte[]{-42, -48, -71, -6});
// �й�
System.out.println("str4 = " + str4);
}