Java基础语法-Unicode、UTF-8、UTF-16

1.Unicode(统一码、万国码),从名字里可以看出,unicode码表囊括世界上各国语言文字。 unidode中包含17个代码级别,第一个代码级别又称作基本的多语言级别(码点从U+0000到U+FFFF),
其余16个代码级别(码点从U+10000到U+10FFFF)包含一些辅助字符。这里说一下码点的概念:编码表中的某个字符对应的代码值。如汉字“我”在unicode中对应的码点为U+6211(在unicode3.0之前采用U+xxxx表示一个码点在Unicode3.0中采用U-xxxx xxxx表示一个码点),而unicode只是对字符的一种数字描述,并没有给出这些字符在计算机中应该以多少字节存储。

2.UTF-8是对unicode在计算机上的储存方式的实现,unicode码值

在0000 0000到0000 007F之间规定为一个字节储存,二进制格式为0xxxxxxx,

在0000 0080到000007FF之间规定为两个字节储存,二进制格式为110xxxxx 10xxxxxx,

在0000 0800到0000 FFFF之间规定为三个字节储存,二进制格式为1110xxxx 10xxxxxx 10xxxxxx

在0001 0000到0010 FFFF之间规定为四个字节储存,二进制格式为11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

一字节的表示范围为0到127即2的7次方,两个字节的表示范围128到2047即2的11次方。三个 字节的表示范围为2048到65535即2的16次方,n字节表示范围为2的(x的个数)的次方

3.下面是unicode码对UTF-8的转换,举个例子:

汉子中的“我”的unicode码为6211,其对应的二进制为 ‭01100010 00010001

在0000 0800到0000 FFFF区间内,所以汉子“我”在UTF-8中为3个字节,三个字节在UTF-8中的格式为1110xxxx 10xxxxxx 10x
 xxxxx,从右到左填充为 1110(0110) 10(001000) 10(010001)转换为十六进制为E68891,

括号里的二进制码从左到右读为6211的二进制码。

4。UTF-16

UTF-16:对任何一个字符都用两个字节储存。

UTF-16基于第一个代码级别,每个字符用16位表示(即两个字节四个十六进制数)通常称为代码单元。基于其他16个级别采用一对连续的代码单元进行编码,这样构成的编码值落入基本多语言级别中空闲的2048代码单元内,

称为替代区域[U+D800到U+DBFF用作第一代码单元,U+DC00到U+DFFF用作第二代码单元](1_048_576)(可表示2的20次方个字符)。

可以看出,当文本中英文居多时,采用UTF-8能够高效的利用计算机的储存空间,而文本以韩文中文居多时,UTF-16会比较适合。

猜你喜欢

转载自www.cnblogs.com/yanquebbuyan/p/10011354.html