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编码。