一、字符集基础知识:
字符集(Character Set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集有:
- ASCII字符集
- GBK字符集
- Unicode(UTF-8)字符集等。
1、ASCII字符集:
- ASCII(American Standard Code for Information Interchange,美国信息交换标准代码):包括了数字、英文、符号。
- ASCII使用1个字节存储一个字符,一个字节是8位,总共可以表示128个字符信息,对于表示英文、数字来说是够用的。
2、GBK:
- GBK是中国的码表,包含了几万个汉字等字符,同时也要兼容ASCII编码,
- GBK编码中一个中文字符一般以两个字节的形式存储。
3、Unicode字符集:
- 统一码,也叫万国码。是计算机科学领域里的一项业界标准。
- UTF-8是Unicode的一种常见编码方式。
注意
- UTF-8编码后一个中文一般以三个字节的形式存储,同时也要兼容ASCII编码表。
- 技术人员都应该使用UTF-8的字符集编码。
- 编码前和编码后的字符集需要一致,否则会出现中文乱码。
常见字符集底层字符的编码是什么样的?
- 英文和数字等在任何国家的字符集中都占1个字节
- GBK字符中一个中文字符占2个字节
- UTF-8编码中一个中文1般占3个字节
编码前的字符集和解码时的字符集有什么要求?
- 必须一致,否则会出现字符乱码
- 英文和数字不会乱码
二、汉字存储和展示过程解析
注意:英文和数字在任何国家的编码中都不会乱码
三、字符集的编码、解码操作
String编码
String解码
演示:
package com.jw;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class CharatorTest {
public static void main(String[] args) throws UnsupportedEncodingException {
String str = "张飞";
String str1 = "关羽";
byte[] b = {-27, -68, -96,-25, -66, -67};
String s = new String(b,"UTF-8");
byte[] bytes = str.getBytes("UTF-8");
byte[] bytess = str1.getBytes("UTF-8");
System.out.println(bytes.length);// utf-8 两个汉字是6个字节 所以长度为6
System.out.println(Arrays.toString(bytes));//[-27, -68, -96, -23, -93, -98]
System.out.println(Arrays.toString(bytess));//[-27, -123, -77, -25, -66, -67]
System.out.println(s);//张羽
}
}