Unicode、UTF-8、UTF-16、UTF-32的区别

文章类型:html

发布者:admin

发布时间:2023-04-13

一:Unicode

1:全称 Unicode Translation Format,又叫做统一码、万国码、单一码。

2:是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

3:常见的是UTF-8、UTF-16、UTF-32和USC-2。

二:UTF-8

1: UTF-8 是一种编码方式,Unicode是一个字符集合。

2:对于单字节的符号,字节的第一位为0,后面的7位为这个字符的Unicode编码,因此对于英文字母,它的Unicode编码和ACSII编码一样。

3:对于n字节的符号,第一个字节的前n位都是1,第n+1位设为0,后面字节的前两位一律设为10,剩下的没有提及的二进制位,全部为这个符号的Unicode码 。

编码范围(编号对应的十进制数)

二进制格式

0x00—0x7F (0-127)

0xxxxxxx

0x80—0x7FF (128-2047)

110xxxxx 10xxxxxx

0x800—0xFFFF (2048-65535)

1110xxxx 10xxxxxx 10xxxxxx

0x10000—0x10FFFF (65536以上)

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

三:UTF-16

1:是Unicode编码集的一种编码形式,把Unicode字符集的抽象码位映射为16位长的整数(即码元)的序列,用于数据存储或传递。Unicode字符的码位需要1个或者2个16位长的码元来表示,因此UTF-16也是用变长字节表示的。

2: 编码规则:

编号在 U+0000—U+FFFF 的字符(常用字符集),直接用两个字节表示。

编号在 U+10000—U+10FFFF 之间的字符,需要用四个字节表示。

四: UTF-32

1:字符所对应编号的整数二进制形式,每个字符占四个字节,这个是直接进行转换的。该编码方式占用的储存空间较多,所以使用较少。

五:总结

1:Unicode 是编码字符集(字符集)而UTF-8、UTF-16、UTF-32是字符集编码(编码规则)

2:UTF-16 使用变长码元序列的编码方式,相较于定长码元序列的UTF-32算法更复杂,甚至比同样是变长码元序列的UTF-8也更为复杂,因为其引入了独特的代理对这样的代理机制;

3:UTF-8需要判断每个字节中的开头标志信息,所以如果某个字节在传送过程中出错了,就会导致后面的字节也会解析出错

4:UTF-16不会判断开头标志,即使错也只会错一个字符,所以容错能力教强;

5:英文占绝大部分,那么用UTF-8更佳;否则UTF-16就占优势,可以节省很多空间;