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会比较适合。