GBK字符中一个中文字符占2个字节, UTF-8编码中一个中文占用3个字节
package com.itheima.d3_charset;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
/**
* 目标:学会自己进行文字的编码和解码,为以后可能用到的场景做准备
*/
public class Test {
public static void main(String[] args) throws UnsupportedEncodingException {
// 1. 编码:把文字转换成字节(使用指定的编码)
String name = "abc我爱你中国"; //在utf-8编码中: 每个中文占用3个字节 英文占用1个字节
// 使用String类的getBytes获取当前字符串占用的字节 返回一个byte类型的数组
// byte[] bytes = name.getBytes(); // 以当前代码默认字符集进行编码 (utf—8)
// 也可以指定编码(GBK)中文占用2个字节
byte[] bytes = name.getBytes("GBK");//要抛异常
// 数组当前数组字节的长度 length
System.out.println(bytes.length);
System.out.println(Arrays.toString(bytes));
// 输出都会转换成对应的ASCII 字符
// [97, 98, 99, -26, -120, -111, -25, -120, -79, -28, -67, -96, -28, -72, -83, -27, -101, -67]
// 2.解码:把字节转换成对应的中文形式(编码前和编码后的字符集必须一致,否则乱码)
// 默认utf-8
// String rs = new String(bytes);// new String构造器会进行解码(将bytes数组进行解码)
// 指定GBK解码
String rs = new String(bytes,"GBK"); // 指定格式解码
System.out.println(rs); // 这里会解码错误,因为前面用的是GBK格式(一个中文字符占用2个字符,)这里默认是UTF-8 所以会解码错误
// 乱码了 abc�Ұ����й�
}
}