天天看点

字符集的一些理解

https://www.cnblogs.com/skynet/archive/2011/05/03/2035105.html

主要参见如上文章,

可以理解如下:

电脑中所有的字符都是由0和1组成的,为了表示字符,人们以 8位 作为一个整体进行了编码。在二进制下,8位长度总共可以表示 2的7次方=256个字符。(假设编号为1-256)

这就是最原始的ASCII 字符集。

由于不能满足中文的需求,于是国家在此基础上进行了调整,即:编号1-127个字符与ASCII 字符集的前127个字符相同,编号128-256的两个字符符号连接在一起表示一个汉字,于是就可以表示 128 X 128  = 16384个汉字。这就是GB2312字符集。实际上只用了7000多个汉字,同时还收录了日语的假名,数学和罗马字符等。

由于这种方式仅能保证在某一个地区内可能可以通用。所以需要一个更为统一的标准,于是就有了Unicode字符集。(注意:JVM中所有的字符均为Unicode字符)

Unicode字符集分为3种:

最原始的UTF-32:这种字符集,使用4个字节(4 X 8 位)来表示一个字符,最多可以表示1114112个。 囊括了世界上绝大多数语言及相关字符。保证了每个字符对应的编码的唯一性。(来源:https://baike.baidu.com/item/Unicode)

缺点:4个字节表示一个字符,使得系统对于字符的操作效率大大降低。

于是诞生了UTF-16字符集。

UTF-16:由于人们常用的字符也就是在 2 的(2 X 8 = 16)次方,也就是65536 个字符之内,所以通常用两个字节来表示一个字符已经足以满足绝大多数的情况。极少数需要这65536个字符之外的字符时,采用特殊方式处理。

UTF-8:是一种针对Unicode的可变长度字符编码。优势劣势的话参见原文章。目前最为通用的编码。