常见字符集介绍
标准ASCII字符集
- ASCII(American Standard Code for Information Interchange):美国信息交换标准代码,包括了英文、符号等。
- 标准ASCII使用1个字节存储一个字符,首位是0,总共可表示128个字符。
GBK(汉字内码扩展规范,国标)
- 汉字编码字符集,包含了2万多个汉字等字符,GBK中一个中文字符集编码成两个字节的形式存储。
- 注意:GBK兼容了ASCII字符集。
- GBK规定:汉字的第一个字节的第一位必须是1。
Unicode字符集(统一码,也叫万国码)
- Unicode是国际组织制定的,可以容纳世界上所有的文字。符号的字符集。
UTF-8
- 是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节
- 英文字符、数组等只占1个字节(兼容标准ASCII编码),汉字字符占用3个字节
注意:技术人员在开发时都应该使用UTF-8编码
要点:
- ASCII字符集:只有英文、数组、符号等,占1个字节。
- GBK字符集:汉字占2个字节,英文、数组占1个字节。
- UTF-8字符集:汉字占3个字节,英文、数字占1个字节。
注意1: 字符编码时使用的字符集,和解码使用的字符集必须一致,否则会出现乱码
注意2:英文,数字一般不会乱码,因为很大字符集都兼容了ASCII编码
字符集的解码、编码操作
- 编码:把字符按照制定字符集编码成字节。
- 解码:把字节按照制定字符集解码成字符。
Java代码完成对字符的编码
String提供了如下方法 | 说明 |
---|---|
byte [ ] getBytes() | 使用平台的默认字符集将该String编码为一系列字节,将结果存储到新的字节数组中 |
byte [ ] getBytes(String charsetName) | 使用指定的字符集将该String编码为一系列字节,将结果存储到新的字节数组中 |
Java代码完成对字符的解码
String提供了如下方法 | 说明 |
---|---|
String(byte[ ] bytes) | 通过使用平台的默认字符集解码指定的字节数组来构造新的String |
String(byte[ ] byte,String charsetName) | 通过指定的字符集解码指定的字节数组来构造新的String |
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class Test {
public static void main(String[] args) throws UnsupportedEncodingException {
// 编码
String data = "a我b";
byte[] bytes = data.getBytes(); //默认按照平台字符集进行编码
System.out.println(Arrays.toString(bytes));
// 按照指定字符集进行编码
byte[] bytes1 = data.getBytes("GBK");
System.out.println(Arrays.toString(bytes1));
// 解码
String s1 = new String(bytes); //默认按照平台字符集进行解码
System.out.println(s1);
// 按照指定字符集进行解码
String s2 = new String(bytes1,"GBK");
System.out.println(s2);
}
}