utf8 编码大小

参考链接:https://www.matools.com/code-convert-utf8

UTF-8简介

UTF-8是一种针对Unicode的可变长度字符编码,又称万国码。

UTF-8用1到6个字节编码UNICODE字符。

UTF-8编码规则

如果只有一个字节则其最高二进制位为0;

如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的字节数,其余各字节均以10开头。

UTF-8转换表表示如下:

Unicode/UCS-4 bit数 UTF-8 byte数 备注
0000~007F 0~7 0XXX XXXX 1
0080~07FF 8~11 110X XXXX,10XX XXXX 2
0800~FFFF 12~16 1110XXXX,10XXXXXX,10XXXXXX 3 基本定义范围:0~FFFF
1 0000~1F FFFF 17~21 1111 0XXX,10XX XXXX,10XX XXXX,10XX XXXX 4 Unicode6.1定义范围:0~10 FFFF
20 0000~3FF FFFF 22~26 1111 10XX,10XX XXXX,10XX XXXX,10XX XXXX,10XX XXXX 5 说明:此非unicode编码范围,属于UCS-4编码。早期的规范UTF-8可以到达6字节序列,可以覆盖到31位元(通用字符集原来的极限)。尽管如此,2003年11月UTF-8被RFC 3629重新规范,只能使用原来Unicode定义的区域,U+0000到U+10FFFF。根据规范,这些字节值将无法出现在合法UTF-8序列中
400 0000~7FFF FFFF 27~31 1111 110X,10XX XXXX,10XX XXXX,10XX XXXX,10XX XXXX,10XX XXXX 6 同上

UTF-8优点

UTF-8编码可以通过屏蔽位和移位操作快速读写。字符串比较时strcmp()和wcscmp()的返回结果相同,因此使排序变得更加容易。字节FF和FE在UTF-8编码中永远不会出现,因此他们可以用来表明UTF-16或UTF-32文本(见BOM) UTF-8 是字节顺序无关的。它的字节顺序在所有系统中都是一样的,因此它实际上并不需要BOM。

UTF-8缺点

你无法从UNICODE字符数判断出UTF-8文本的字节数,因为UTF-8是一种变长编码它需要用2个字节编码那些用扩展ASCII字符集只需1个字节的字符 ISO Latin-1 是UNICODE的子集,但不是UTF-8的子集 8位字符的UTF-8编码会被email网关过滤,因为internet信息最初设计为7位ASCII码。因此产生了UTF-7编码。 UTF-8 在它的表示中使用值100xxxxx的几率超过50%, 而现存的实现如ISO 2022, 4873, 6429, 和8859系统,会把它错认为是C1 控制码。因此产生了UTF-7.5编码。

文章目录