Java编码

发布时间 2023-04-16 17:02:06作者: 为了生活更好

有关编码的基础 知识

1. 位 bit 最小的单元

字节

byte 机器语言的单位 1byte=8bits

1B=1byte

1KB=1024B

1MB=1024KB

1GB=1024MB

 

字符:是各种文字和符号的总称,包括各个国家的文字,标点符号,图形符号,数字等。

字符集:字符集是多个符号的集合,每个字符集包含的字符个数不同。

字符编码:字符集只是规定了有哪些字符,而最终决定采用哪些字符,每一个字符用多少字节表示等问题,则是由编码来决定的。计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能 够识别和存储各种文字。

 

Unicode的出现

虽然通过使用不同字符集,我们可以在一台机器上查阅不同语言的文档,但是我们仍然

无法解决一个问题:如果一份文档中含有不同国家的不同语言的字符,那么无法在 一份文档中显示

所有字符 。为了解决这个问题,我们需要一个全人类达成共识的巨大的字符集,这就是 Unicode字符集。

Unicode字符集涵盖了目前人类使用的所有字符,并为每个字符进行统一编号,分配唯一的字符码( Code Point)。 Unicode字符集将所有字符按照使用上的频繁度划分为 17个层面( Plane每个层面上有 216=65536个字符码空间。其中第0个层面 BMP,基本涵盖了当今世界用到的所有字符。其他的层面要么是用来表示一

些远古时期的文字,要么是留作扩展。我们平常用到的 Unicode字符,一般都是位于 BMP层

面上的。目前 Unicode字符集中尚有大量字符空间未使用。

 

对定长的字符编码, 例如ascii, 直接每个byte查ascii表转换为字符即可

但是对unicode来说实际传输或者存储过程中, 如果使用定长双字节, 一是不能表示BMP层之外的字符, 二是对很多字符明明单字节可以表示, 用双字节产生了浪费

 

 

如上图所示, 如果一个程序要解析utf-8编码的比特流, 读取首字节后就可以知道当前字符的长度, 并拆出上面x表示的真实unicode代码

上面的110xxxxxx中的110只是标记符, xxxxx部分组合起来才是真实unicode码