字符集编码是指对多个字符(通常在几十到几万个不等)进行整合封装成一个文件所使用的编码,外部程序通过这种编码就可以从字符集文件中调用指定的字符。我们常见的计算机字体文件就使用了字符集编码,通过输入法输入文字或者浏览网页时都会通过指定的字符集编码从字体文件中调用字符。

1.以下是常见的字符集:

ASCII及其扩展字符集 作用:表语英语及西欧语言。 位数:ASCII是用7位表示的,能表示128个字符;其扩展使用8位表示,表示256个字符。 范围:ASCII从00到7F,扩展从00到FF。

ISO-8859-1字符集 作用:扩展ASCII,表示西欧、希腊语等。 位数:8位, 范围:从00到FF,兼容ASCII字符集。

Latin1 ISO-8859-1的别名

GB2312字符集:1981年5月1日发布的简体中文汉字编码国家标准。GB2312对汉字采用双字节编码,收录7445个图形字符,其中包括6763个汉字。

BIG5字符集:台湾地区繁体中文标准字符集,采用双字节编码,共收录13053个中文字,1984年实施。

GBK字符集:1995年12月发布的汉字编码国家标准,是对GB2312编码的扩充,对汉字采用双字节编码。GBK字符集共收录21003个汉字,包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字。

GB18030字符集:2000年3月17日发布的汉字编码国家标准,是对GBK编码的扩充,覆盖中文、日文、朝鲜语和中国少数民族文字,其中收录27484个汉字。GB18030字符集采用单字节、双字节和四字节三种方式对字符编码。兼容GBK和GB2312字符集。

UCS字符集 作用:国际标准 ISO 10646 定义了通用字符集 (Universal Character Set)。它是与UNICODE同类的组织,UCS-2和UNICODE兼容 位数:它有UCS-2和UCS-4两种格式,分别是2字节和4字节 范围:目前,UCS-4只是在UCS-2前面加了0×0000

Unicode字符集: 作用:国际标准字符集,它将世界650种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换,兼容ISO-8859-1 位数:UNICODE字符集有多个编码方式,分别是UTF-8,UTF-16和UTF-32

2.如何判断字符集

2.1 字节序 首先说一下字节序对编码的影响,字节序分为Big Endian字节序和Little Endian字节序。不同的处理器可能不一样。所以,传输时需要告诉处理器当时的编码字节序。

Big Endian 大端存储:高位字节存在低地址,低字节存于高地址 Little Endian 小端存储:相反

举例:0x03AB 大端存储 0000:03 0001:AB 小端存储 0000:AB 0001:03

Java判断处理器是大端存储还是小端存储

public class JudgeCPUEndian {
    public static void main(String[] args) {
        if (ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN) {
            System.out.println("BIG_ENDIAN");
        } else {
            System.out.println("LITTLE_ENDIAN");
        }
    }
}

在我的处理器上是小端存储

2.2.编码识别

UNICODE,根据前几个字节可以判断UNICODE字符集的各种编码,叫做Byte Order Mask方法

BOM:
UTF-8: EFBBBF
UTF-16 Big Endian:FEFF
UTF-16 Little Endian:FFFE
UTF-32 Big Endian:0000FEFF
UTF-32 Little Endian:FFFE0000

3.按所表示的文字分类

语言 字符集 正式名称

英语、西欧语 ASCII,ISO-8859-1 MBCS 多字节

简体中文 GB2312 MBCS 多字节

繁体中文 BIG5 MBCS 多字节

简繁中文 GBK MBCS 多字节

中文、日文及朝鲜语 GB18030 MBCS 多字节

各国语言 UNICODE,UCS DBCS 宽字节

本文系本人个人公众号「梦回少年」原创发布,扫一扫加关注。