
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");//要抛异常// 数组当前数组字节的长度 lengthSystem.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�Ұ����й�}}
